C/C++的条件编译详解

2014-11-24 12:36:26 · 作者: · 浏览: 0

1

#ifdef _XXXX

…程序段1…

#else

www.2cto.com

…程序段2…

#endif

这表明如果标识符_XXXX已被#define命令定义过则对程序段1进行编译;否则对程序段2进行编译。

2

#ifndef _XXXX

…程序段1…

#else

…程序段2…

#endif

这里使用了#ifndef,表示的是if not def.当然是和#ifdef相反的状况(如果没有定义了标识符_XXXX,那么执行程序段1,否则执行程序段2)。

3

#if 常量

…程序段1…

#elif<常量表达式2>

…程序段2…

#elif<常量表达式3>

…程序段3…

……

#else

…程序段2…

#endif

这里表示,如果常量为真(非0,随便什么数字,只要不是0),就执行程序段1,否则执行程序段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

}

摘自 360知识网