결국, 전처리기는 바보다.
[먕] 엄아.
(엄) 왜
[먕] 디버깅좀 해다오
[먕] 미치기 일보직전이다.
[먕] -_-
[먕]
typedef enum
{
VAL_1=0x01,
VAL_2=0x02,
VAL_4=0x04,
VAL_8=0x08
} tempenum;
#define VALUES (VAL_1 | VAL_2 | VAL_4 )
#if VALUES & VAL_8 > 0
a=6;
#endif
[먕] a 는 어디에도 정의되어 있지 않다.
[먕] 이거 에러가 날까
#if VALUES & VAL_4 > 0
a=6;
#endif
[먕] 이것도 에러가 날까
#if VALUES & VAL_4 > 0
a=6;
#endif
[먕] 이 구문은 당근 정의가 살아 있기 때문에
[먕] 컴팔 에러가 나야 하는거 아니냐..
(엄) 음.
(엄) &가 우선순위가 높냐
(엄) >가 우선순위가 높냐?
[먕]
#if (VALUES & VAL_4) > 0
a=6;
#endif
[먕] 이것도 똑같다.
[먕] 왜왜.. 에러가 안나는게냐
(엄) 일단
#if (VALUES & VAL_8) > 0
a=6;
#endif
요넘은.
(VALUES & VAL_8) == 0이기 때문에
당근 a = 6; 이 컴파일이 안될거고
[먕] 그건 당연한 것이고
(엄) 음..
(엄) C로 컴파일하냐?
[먕] msvc
[먕] dotnet 7.1
[먕] 에 cpp 파일임
(엄) 잠만;
(엄) 아.
(엄) 아주 기본적인 차원의 문제로구만;
[먕] 그렇고만
[먕] 무엇이냐
(엄) -_-;
(엄) #if 구문은
(엄) 프리프로세싱 단계에서 평가되는 지시어 아니냐.
[먕] 그렇삼
(엄) 그런데 VAL_1 등의 심볼이 값을 가지는 것은
(엄) 컴파일 단계에서 어사인 된 이후이므로,
(엄) 당근 프리프로세싱단계에서
(엄) VAL_1 은 정의되지 않은 기호로
(엄) 평가되는 것이지.
[먕] 응응
(엄) 알겠3?
[먕] 이해돼셨삼
(엄) 결국 VAL_XXX가 어떤 값으로 enum되어 있건 -_-
(엄) 프리프로세서는 정의되지 않은 기호니까니
(엄) 0으로 간주하는;
[먕] 해결책은?
(엄) enum으로 돼 있는걸
(엄) #define 으로 바꾸는수박에 없지 -_-
(엄) 버전관리 하려는거 아니냐?
[먕] log level 조정이 목적인데
[먕] 뭐 목적이야 어찌돼었든
(엄) 움.
(엄) enum으로는 방법이 없을거 같다 이눔아.
(엄) enum은 안되 이눔아~
(엄) _-_;
[먕] 꺄악
[먕] 전처리기 졸라 구려 구려
[먕] -_-
(엄) 전처리기 구린거 이제 알았냐;
[먕] 아악.. c 컴파일러 싫어
[먕] 뭔가 방법이 있을게야 -_-
[먕] 찾아보자 -_-
(엄) 음. 나 역시 C의 가장 안좋았던 선택은 -_- 프리프로세서 시스템. -_- 이라고 생각한다;
[먕] 이래서 꾸질하게 define 문을 쓰는게군..;
[먕] 끄응.
(엄) 그렇지 -_-