2011-08-25 3 views
1

내 PCH 파일에 다음 매크로가 있습니다.경고를주는 PCH 파일에 매크로 정의

이제 DEBUG = 0 또는 DEBUG = 1을 넣어도 상관없이 항상 첫 번째 절이 사용됩니다. 하지만 PCH의 DEBUG에 대해 "ifdef"대신 "if"를 사용하면 문제가 없지만 "MYLOG 결과를 사용하지 않고 결과를 나타내는"MYLOG 문에 경고가 표시됩니다.

이 상황을 어떻게 제거 할 수 있습니까?

답변

2

DEBUG = 0 인 경우에만 경고 메시지가 표시됩니다. 문제는 프리 프로세서를 실행 한 후, 컴파일러는 다음과 같은 코드를 볼 수 있다는 것입니다 :

... 
MYObject.enableLogging ? NSLog(@"your log",...) : TRUE; 
... 

컴파일러는 당신이 당신이 원하는 그 결과 어떤 함수가 한 가정, 함수의 결과를 무시시키는 괜찮이다 유용하지 않습니다. 그러나 삼항 연산자를 사용하여 코드에서 값을 계산할 때 문제가 발생하면 해당 계산 결과를 원합니다. 당신이이 매크로의 결과를 사용하지 않을 것이라는 점을 알고 있다면, 당신은 그것을 무시 무효화하는 캐스팅 수 : 매크로의 결과를 사용할 수있는 경우에, 당신은 캐스트 모든 작업을 수행해야합니다

#define MYSERVERLOG(iLog, ...) ((void)(iLog ? NSLog(__VA_ARGS__) : TRUE)) 

매크로를 사용하고 결과를 무시하거나 경고와 함께 살아야 할 때. 이 경우 문제를 피하기 위해 매크로 주위에 괄호를 넣어야합니다.

#define MYSERVERLOG(iLog, ...) (iLog ? NSLog(__VA_ARGS__) : TRUE) 
1

당신이 할 경우

#define DEBUG 0 

또는 당신은 "DEBUG"매크로 이렇게 정의 된

#define DEBUG 1 

을 ... 할 경우

#ifdef DEBUG 

항상 (때문에), true가 될 것입니다 DEBUG가 정의됩니다.

두 번째 절을 사용하려면 매크로가 모두 정의되지 않았는지 확인해야합니다 (즉, 매크로 삭제 또는 주석 처리).

+0

나는 그것을 가지고있다. 그러나 내가 함께 DEBUG를 지울 때 위의 모든 나의 MYLOG 문장에 "결과를 사용하지 않고 표현하기"라는 경고를 받기 시작한다. 그것은 잘 작동하지만. 왜 이런 경고가 나오는지 말해 줄 수 있니? – Abhinav