반응형
#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
반응형
'developer tip' 카테고리의 다른 글
Google 스프레드 시트 스크립트 세트 셀 값 (0) | 2020.08.20 |
---|---|
http HEAD 대 GET 성능 (0) | 2020.08.20 |
CSS를 통해 미리 서식이 지정된 텍스트로 요소 표시 (0) | 2020.08.20 |
여러 키로 암호화 / 복호화 (0) | 2020.08.20 |
Clojure에서 doseq와 for의 차이점 (0) | 2020.08.20 |