이 질문이 순진한 경우 용서하십시오. 다음 프로그램을 고려하십시오.
#include <stdio.h>
int main() {
int i = 1;
i = i + 2;
5;
i;
printf("i: %d\n", i);
}
위의 예에서, 진술 5;과는 i;완전히 불필요한 것, 그러나 기본적으로 경고 또는 오류없이 코드 컴파일은 (단, GCC는 던져 않습니다 warning: statement with no effect [-Wunused-value]와 때 실행 된 경고 -Wall). 그들은 프로그램의 나머지 부분에 영향을 미치지 않으므로 왜 처음부터 유효한 진술로 간주됩니까? 컴파일러는 단순히 그것들을 무시합니까? 그러한 진술을 허용하면 어떤 이점이 있습니까?
;그 뒤에 넣어서 진술이 될 수 있습니다 . 표현이 성명 될 수없는시기에 대한 더 많은 규칙을 추가하는 것은 언어를 복잡하게 만들 것입니다
printf()? 성명은 5;기본적으로 "무엇이든 말한다 5(아무것도)하지 않고, 그 결과를 무시합니다. 귀하의 성명 printf(...)은"무엇이든 printf(...)수행 하고 결과를 무시 (의 반환 값을 printf()). "C가 같은 사람들을 취급합니다. 이것은 또한 같은 코드를 허용 (void) i;곳 i입니다 void의도적으로 사용되지 않은 것으로 표시 하기 위해 캐스트하는 함수에 대한 매개 변수
printf()값을 무시해도 결국에는 값을 무시하더라도 호출 에 영향을 미치기 때문에 그 결과는 동일 하지 않습니다. 대조적 5;으로 전혀 효과가 없습니다.