2011-10-07 6 views
18

일부 클래스를 보면 "파운드"또는 #if 구문에 약간 혼동 스럽습니다. 예를 들어목표 C "#if"구문

:

#if someConstant == someNumber 
    do something 
#elif 
    etc 

대 :

if (someConstant == someNumber) 
    do something 
else if { 
    do more stuff 
} 

무슨 차이가, 그리고 왜 #if을 사용합니까?

답변

28

#if 등은 전처리 지시어입니다. 이것은 컴파일 전에 컴파일 된 것이지 런타임에는 처리되지 않는다는 것을 의미합니다. 이것은 예를 들어, 당신이 debug을 위해 구축하고 경우에만 컴파일 디버깅 동작을 정의하는, 유용 할 수 없습니다 release :

#if DEBUG 
    #define ISRelease(x) [x release] 
#else 
    #define ISRelease(x) [x release], x = nil 
#endif 

(. 제프 LAMARCHE의 blog의 코드 제공) 그렇게하지 이런 식으로 앱을 제출하고 디버깅 코드를로드하기 직전에 전체 애플리케이션의 코드를 검토해야합니다. 이것은이 지시어를 사용하는 한 가지 간단한 예일뿐입니다.

+0

#if는 #ifdef와 동일합니까 ?? –

+0

No - 위의 '# if'를 '# ifdef' ("정의 된 경우")로 바꾼 경우 조건부는'DEBUG'가 이미 정의 된 경우에만 성공합니다. 반대의 결과를 리턴하는'# ifndef' 전 처리기 지시어 ("정의되지 않았다면")도 있습니다. – Stuart

10

#if전 처리기 지시문입니다.

if언어 구조입니다.

차이점은 최종 프로그램이 컴파일되는 방식입니다. #if을 사용하면 해당 지시문의 결과가 최종 프로그램에 포함됩니다. 언어 구문을 사용하면 구문에 전달되는 식은 런타임 인 ​​으로 계산되고 이 아닌 컴파일 시간은이됩니다.

0

이전 답변은 #if을 디버그에서 용어로 바꾸고 더 많은 일반적인 사용법을 놓친 것입니다. #if은 큰 코드 조각에 주석을다는 데 사용됩니다. 이것은 프로그래머가 이미 주석이 포함 된 것을 제거해야 할 때 유용합니다.

#if 0 
    a lof of C code with /* style */ comments included 
#endif 

나는 이것을 많이 사용합니다. 다른 어떤 #if 및 코멘트 스타일보다 유리한 점 - 실제로 그 안에있는 깨진 구문 대부분은 신경 쓰지 않습니다.