'unused variable'에 해당되는 글 2건

- unused variable

  int foo(void)

  {

    int i __attribute__((unused));

    return 0;

  }


- unused function

   static int foor(void) __attribute__((unused));

   static int foo(void)

  {

    int i;

    return 0;

  }


- unused label


  #define HAVE_CHECK


  int foo(int mode)

  {

    #ifdef HAVE_TYPE

      if (mode == TYPE) goto LABEL_TYPE;

    #endif


    #ifdef HAVE_CHECK

      if (mode == CHECK) goto LABEL_CHECK;

    #endif


 LABEL_TYPE:

 __attribute__((cold, unused));

    return 0;


LABEL_CHECK:

 __attribute__((cold, unused));

    return -1;


    return 0;

  }

'development' 카테고리의 다른 글

How to install ubuntu to rangeley  (1) 2016.01.21
[gcc] -march, -mtune 옵션  (0) 2016.01.08
[gcc] __attribute__((......)) 키워드  (0) 2016.01.06
openwrt  (0) 2015.02.24
[network] nat 설정법  (0) 2015.01.15
[linux] debug fs 사용법  (0) 2015.01.07
블로그 이미지

얼굴반반피곤님 김유석0

댓글을 달아 주세요

아래 코드를 빌드하면

 
#include <stdio.h>
#include <sys/types.h>


int main(int argc, char *argv[])
{
    u_int64_t value1;
    
    value1 = 0xffffffffffffffff;
    
     return 0;
}


아래와 같이 빌드 에러 발생하게 됩니다.  


cc -Wall -Werror -Werror -std=gnu99 -c -o unused.o unused.c 
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] unused variable 문제  (0) 2013.08.02
[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
블로그 이미지

얼굴반반피곤님 김유석0

댓글을 달아 주세요