条件编译,是让编译器在条件满足时才进行编译,否则编译器就会忽略。 条件编译块,其语法结构为: #if [必须] #elif [可选] #else [可选] #endif [必须] 另外下面的形式是等价的: #ifdef (identifer)<==> #if defined (identifer) #ifndef (identifer) <==> #if !defined (identifer) 其作用依赖于你的写法和意图,例如: (1)防止头文件被重复编译,在头文件windows.h中我们看到一个最大的条件编译块: #ifndef _WINDOWS_ //位于头文件有效代码最顶部 #define _WINDOWS_ //... #endif // 位于头文件尾部 那么如果你的工程实现文件中重复包含了windows.h也不会导致问题,因为windows.h在被第一次编译的时候就定义了_WINDOWS_ 标识,下次编译器不会再编译条件编译块之间的代码了,因为条件为假。 (2)检测CPU类型 #if !defined(_68K_) && !defined(_MPPC_) && !defined(_X86_) && !defined(_IA64_) && !defined(_AMD64_) && defined(_M_IX86) #define _X86_ // Intel公司提供的 X86系列CPU #endif #if !defined(_68K_) && !defined(_MPPC_) && !defined(_X86_) && !defined(_IA64_) && !defined(_AMD64_) && defined(_M_AMD64) #define _AMD64_ // ADM公司提供的CPU #endif #if !defined(_68K_) && !defined(_MPPC_) && !defined(_X86_) && !defined(_IA64_) && !defined(_AMD64_) && defined(_M_M68K) #define _68K_ // 苹果电脑通常使用一种CPU #endif #if !defined(_68K_) && !defined(_MPPC_) && !defined(_X86_) && !defined(_IA64_) && !defined(_AMD64_) && defined(_M_MPPC) #define _MPPC_ // 苹果电脑通常使用另一种CPU #endif (3)检测硬件平台 #ifndef _MAC #if defined(_68K_) || defined(_MPPC_) // 如果使用了这两种类型的CPU #define _MAC // 则为苹果电脑的硬件平台 #endif #endif 所以楼主的理解基本是对的,当然条件编译块的用途实在是太多了,你当然可以把它嵌入你的源代码中,控制编译器有选择地编译,而不是仅仅在头文件中使用。 我要指出楼主一点小小的错误: 如果定义了_MAC标识,是指的苹果电脑的硬件平台,而不是苹果操作系统。事实上,苹果电脑上现在也可以装windows操作系统。 要知道编译器对不同的硬件平台(主要指CPU类型)生成的机器码是不同的,所以界定硬件平台是重要的,但是由于我们基本上都是使用的X86系列CPU,所以实际也不需要太关心这个。
条件编译
最新推荐文章于 2024-07-25 17:24:15 发布