C/C++的條件編譯
關(guān)鍵詞:
條件編譯 ?? ??????????????????????????????????????
1
#ifdef _XXXX
...程序段1...
#else
...程序段2...
#endif
? 這表明如果標識符_XXXX已被#define命令定義過則對程序段1進行編譯;否則對程序段2進行編譯。
2
#ifndef _XXXX
...程序段1...
#else
...程序段2...
#endif
? 這里使用了#ifndef,表示的是if not def。當然是和#ifdef相反的狀況(如果沒有定義了標識符_XXXX,那么執(zhí)行程序段1,否則執(zhí)行程序段2)。
3
#if 常量
...程序段1...
#elif<常量表達式2>
...程序段2...
#elif<常量表達式3>
...程序段3...
??????????????? ...??? ...
#else
...程序段2...
#endif
? 這里表示,如果常量為真(非0,隨便什么數(shù)字,只要不是0),就執(zhí)行程序段1,否則執(zhí)行程序段2。
例如:
1.
#if defined(_PC) && defined(_SSE)
# ifdef DEBUG
#? define __PC_VERIFY_ALIGNMENT__
# endif
# ifdef __PC_VERIFY_ALIGNMENT__
#? define PC_VERIFY_ALIGN_ASSERT( ptr ) \
? {\
?? if( ( ( (INT) ptr ) % 16) != 0 ) \
?? {\
??? debugf( NAME_Critical, TEXT("Unaligned PC data (0x%X)"), ptr ); \
??? DebugBreak(); \
?? }\
? }
# else
#? define PC_VERIFY_ALIGN_ASSERT( ptr )
# endif
#else
# define PC_VERIFY_ALIGN_ASSERT( ptr )
#endif
2.
#define ABC 3
main()
{
#if? ABC>0
int a=1;
printf("%d\n",a);
#elif ABC<0
int b=-1;
printf("%d\n",b);
#else
int c=0;
printf("%d\n",c);
#endif
}