이 temp
의 값이 달리 사용되지 않는 것을 의미하고, 최적화 컴파일러 (변수가 설정되어 있지만 사용되지 않음) 그것에 대해 경고하지만, (void)temp;
을 포함하여, 당신은 (현재) 컴파일러에서 경고없이 도망. 컴파일러 경고는 물론 코드도 생성하지 않습니다. 소스 코드를 감안할 때
:
extern void func(int a);
void func(int a)
{
int temp;
temp = a;
//(void)temp;
}
GCC 4.8.1 맥 OS X 10.8.4에이 코드에 대한 경고 제공 :
$ gcc -O3 -g -std=c11 -Wall -Wextra -c void.c
void.c: In function ‘func’:
void.c:4:8: warning: variable ‘temp’ set but not used [-Wunused-but-set-variable]
int temp;
^
$
제거 주석 마커를 (그래서 (void)temp;
입니다 컴파일 됨) 컴파일이 경고를 생성하지 않습니다.
이 명확하게 몇 가지 큰 맥락에서 증류 된 예제 코드 (AN SSCCE (Short, Self-Contained, Correct Example)! - 하나를 생산 주셔서 감사합니다). 코드가 나타나는 이유는 더 많거나 적습니다. 할당 된 값을 사용하는 temp
으로 할당 한 후 조건부로 컴파일 된 코드가 있기 때문에 종종 발생합니다.
void func(int a)
{
int temp;
...
temp = some_function(a);
#if defined(SOMETHING_OR_OTHER)
...do stuff with temp...
#else
(void)temp;
#endif
}
이 표기법은 하나의 함수 호출을 유지하지만 SOMETHING_OR_OTHER
가 정의되지 않은 경우 컴파일러에서 불만을 피할 대신 함수 매개 변수의 할당되고, 그것은 종종 함수 호출의 결과가 될 것입니다.
게시하는 실제 코드에서 '(void) temp'는 실제로 매우 이상하게 보입니다. – NPE
NPE가 말한 바. 이것은 컴파일러에서 경고를하기를 원하므로 불필요한 지역을 제거 할 수있는 상황입니다. –