아래 코드를 빌드하면
#include <stdio.h> #include <sys/types.h> int main(int argc, char *argv[]) { u_int64_t value1; value1 = 0xffffffffffffffff; return 0; }
아래와 같이 빌드 에러 발생하게 됩니다.
unused.c: In function ‘main’
unused.c:7:6: error: unused variable ‘value’ [-Werror=unused-variable]
cc1: all warnings being treated as errors
make: *** [unused.o] Error 1
이유는 , 사용하지도 않으면서 value1 이라는 변수를 선언해 놓았기 때문인데, 보통은 Warnning 만 발생하지만 -Werror 옵션을 사용하면 기존의 Warnning 들을 모두 error 로 인식하기 때문입니다.
가장 쉬운 해결 방법은, value1 이라는 변수를 사용하지 않는 것인데 아래와 같은 상황에서는 그렇기도 어렵습니다.
#include <stdio.h> #include <sys/types.h> #define HAVE_PRINT int main(int argc, char *argv[]) { u_int64_t value1; value1 = 0xffffffffffffffff; #ifdef HAVE_PRINT printf("OUT : %lld\n", (long long unsigned int)value1); #endif return 0; }
위와 같은 코드일경우, HAVE_PRINT 선언 상태에 따라서, value1 을 사용할 수도, 안할 수도 있으므로 무작정 value1 을 삭제할 수는 없습니다.
그래서 아래와 같이 value1 에 속성을 주어서 선언하면 이런 문제를 해결할 수 있습니다.
#include <stdio.h> #include <sys/types.h> #define HAVE_PRINT int main(int argc, char *argv[]) { u_int64_t value1 __attribute__((unused)); value1 = 0xffffffffffffffff; #ifdef HAVE_PRINT printf("OUT : %lld\n", (long long unsigned int)value1); #endif return 0; }
이렇게 하면 unused value 빌드 에러를 피할 수 있습니다. 단, 이 방법은 gnu 확장 문법이므로 다른 컴파일러 사용시에는 주의를 하셔야 합니다.
'development' 카테고리의 다른 글
[linux] debug fs 사용법 (0) | 2015.01.07 |
---|---|
[driver] ipTime N150UA-4dBi (8) | 2014.09.16 |
[program] 32bit CPU 에서 64bit 변수 사용 문제 (0) | 2013.07.25 |
[u-boot] RPC : sendmsg returned error 101 (0) | 2013.07.19 |
[Kernel] Kbuild system (0) | 2013.07.12 |