문제

전처리 변수의 값을 stderr로 인쇄 할 수 있습니다. ? 예를 들어, 내가 지금 가지고있는 것은 다음과 같습니다.

#define PP_VAR (10)
#if (PP_VAR > 10)
    #warning PP_VAR is greater than 10
#endif

그러나 내가하고 싶은 것은 다음과 같습니다.

#define PP_VAR (10)
#if (PP_VAR > 10)
    #warning PP_VAR=%PP_VAR%
#endif

이와 같은 것입니다 ?

도움이 되었습니까?

해결책

Visual Studio에서 전처리 변수의 값을 인쇄 할 수 있습니다. 다음은 _msc_ver의 값을 인쇄합니다.

#define STRING2(x) #x
#define STRING(x) STRING2(x)

#pragma message(STRING(_MSC_VER))

이것이 표준이 얼마나 표준인지 잘 모르겠습니다.

다른 팁

이것은 GCC 4.4.3에서 작동합니다.

#define STRING2(x) #x
#define STRING(x) STRING2(x)
#pragma message "LIBMEMCACHED_VERSION_HEX = " STRING(LIBMEMCACHED_VERSION_HEX)

수확량 :

src/_pylibmcmodule.c:1843: note: #pragma message: LIBMEMCACHED_VERSION_HEX = 0x01000017

많은 C 컴파일러가 지원합니다 #warning (그러나 C 표준에 의해 정의되지는 않습니다).

그러나 GCC는 적어도 다음 데이터에 대한 사전 처리를 수행하지 않으므로 변수의 값을보기가 어렵다는 것을 의미합니다.

#define PP_VAR 123
#warning "Value of PP_VAR = " PP_VAR
#warning "Value of PP_VAR = " #PP_VAR
#warning "Value of PP_VAR = " ##PP_VAR

GCC는 다음과 같습니다.

x.c:2:2: warning: #warning "Value of PP_VAR = " PP_VAR
x.c:3:2: warning: #warning "Value of PP_VAR = " #PP_VAR
x.c:4:2: warning: #warning "Value of PP_VAR = " ##PP_VAR

사전 처리기 토큰 페이스팅 연산자 : ## token_name을 사용하십시오

앞서 언급했듯이, 사용중인 전 처리기 지침은 비표준이므로 ymmv입니다.

글쎄, 당신이하는 일은 실제로 비표준입니다. 첫째, "#Warning"또는 "#Warn"지침은 표준이 아닙니다. 둘째, 사전 처리기를 사용할 때 선은 공간없이 파운드 기호로 시작해야합니다.

#ifdef BLAH1
#    define BLAH2 // OK, because pound is at the very left.
#endif

#ifdef BLAH3
     #define BLAH4 // Works on many compilers, but is non-standard.
#endif

비표준 확장자를 이미 사용하고 있으므로 "#Warning"에 대한 내용을 확인하기 위해 사용하는 특정 전처리/컴파일러의 문서를 찾아야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top