이 프로그램의 컴파일 (에 diab와 C) :괄호 안의 문자열이 컴파일되는 이유는 무엇입니까?
이 컴파일러 오류로 간주되지 않습니다 왜int main()
{
("----");
}
- ? (이 구문을 필요로하는 다른 기능을 지원하기 때문입니까?)
- 무엇이 컴파일 되나요?
이 프로그램의 컴파일 (에 diab와 C) :괄호 안의 문자열이 컴파일되는 이유는 무엇입니까?
이 컴파일러 오류로 간주되지 않습니다 왜int main()
{
("----");
}
그것은 1;
, "----";
, 또는 1 + 2 + 3 + 4;
컴파일 것 같은 이유로 컴파일 : 세미콜론 뒤에 표현, 유효한 문이 때문이다.
C의 많은 부분이 작동하려면 세미콜론을 사용하여 표현식을 문장으로 변환해야합니다. 예를 들면 다음과 같습니다.
do_stuff_to(x);
은 값이 있지만 자체적 인 명령문으로 유용 할 수있는 함수 호출입니다.
x = y;
같은 무언가조차 (즉 과제입니다) 실제로 표현이다. 이것은 특히 문장의 위치에서 매우 유용합니다. C grammar의
관련 부분은 다음과 같습니다
입니다statement
: labeled_statement
| compound_statement
| expression_statement
| selection_statement
| iteration_statement
| jump_statement
;
가하는 statement
가 expression_statement
을 포함하여 여러 가지 중 하나가 될 수 있습니다; 이고
expression_statement
: ';'
| expression ';'
;
,
expression_statement
세미콜론 또는 세미콜론 뒤에
expression
어느이다.
이 프로그램의 컴파일 대상은 구현에 따라 다릅니다. 컴파일러는 문자열을 프로그램의 데이터 세그먼트로 자유롭게 컴파일하거나 단순히 무시할 수 있습니다. 내 컴퓨터에서, GCC는 최적화 된 레벨이없는 경우에도 문자열을 컴파일 된 실행 파일에 전혀 넣지 않습니다.
컴파일러는 플래그 -Wunused-value
이 주어지면 GCC가이 구문에 대해 경고하지 않아도됩니다. 이 특별한 구성은 전혀 유용하지 않기 때문에이 경고는 도움이 될 수 있습니다.
test.c: In function ‘main’:
test.c:2:5: warning: statement with no effect [-Wunused-value]
("----");
^
아주 잘 연결해 주셔서 감사합니다. –
왜 오류가 발생합니까? 이것은 유효한 표현식입니다. 괄호는 컴파일러에게 할당 부족에 대한 경고를 표시하지 않기 만합니다. 데이터 세그먼트의 문자열이있는 빈 프로그램으로 컴파일한다고 가정합니다. – Myst