developer tip

#if defined (WIN32)와 #ifdef (WIN32)의 차이점

copycodes 2020. 8. 20. 19:01
반응형

#if defined (WIN32)와 #ifdef (WIN32)의 차이점


Linux gcc 4.4.1 C99에서 실행될 프로그램을 컴파일하고 있습니다.

Windows 또는 Linux에서 컴파일 될 코드를 분리하기 위해 #defines를 넣었습니다. 그러나이 오류가 발생했습니다.

error: macro names must be identifiers.

이 코드 사용

#ifdef(WIN32)
/* Do windows stuff
#elif(UNIX)
/* Do linux stuff */
#endif

그러나 이것을 변경했을 때 오류가 수정되었습니다.

#if defined(WIN32)
/* Do windows stuff
#elif(UNIX)
/* Do linux stuff */
#endif

왜 그 오류가 발생하고 #defines가 다른지 궁금합니다.

감사합니다.


#ifdef 구문을 사용하는 경우 대괄호를 제거하십시오.

둘 사이의 차이점은 #ifdef단일 조건 만 사용할 수있는
반면 #if defined(NAME)복합 조건 사용할 수 있다는 것입니다.

예를 들어 귀하의 경우 :

#if defined(WIN32) && !defined(UNIX)
/* Do windows stuff */
#elif defined(UNIX) && !defined(WIN32)
/* Do linux stuff */
#else
/* Error, both can't be defined or undefined same time */
#endif

#ifdef FOO

#if defined(FOO)

동일합니다.

하지만 한 번에 여러 작업을 수행하려면 다음과 같이 정의 된 것을 사용할 수 있습니다.

#if defined(FOO) || defined(BAR)

#ifdef해당 이름의 매크로가 정의되었는지 #if확인하고 표현식을 평가하고 참 값을 확인합니다.

#define FOO 1
#define BAR 0

#ifdef FOO
#ifdef BAR
/* this will be compiled */
#endif
#endif

#if BAR
/* this won't */
#endif

#if FOO || BAR
/* this will */
#endif

참고URL : https://stackoverflow.com/questions/1714245/difference-between-if-definedwin32-and-ifdefwin32

반응형