- 1、本文档共3页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
计算机-c语言条件编译详解
预处理之条件编译
1、条件编译
(1)为什么需要条件编译
有时候我们希望程序有多种配置,我们在源代码编写时写好了各种配置的代
码,然后给个配置开关,在源代码级别去修改配置开关来让程序编译出不同的效
果。
(2)常见的条件编译有哪些
(1)#if #else #elif #endif
(2)#ifdef #endif
宏定义来实现条件编译 (#define #undef #ifdef)
程序有DEBUG版本和RELEASE版本,区别就是编译时有无定义DEBUG宏。
方法一:注释 例:macro.c
掉 #include stdio.h 方法二:此处插入
#define DEBUG #undef DEBUG
#define DEBUG
#ifdef DEBUG
#define debug(x) printf(x)
#else
#define debug(x)
#endif
int main(void)
{
debug(this is a debug info.\n);
return 0;
}
在本例中,我们可以通过注释#define DEBUG或者在#define DEBUG
后加#undef DEBUG,通过这样的开关就可以配置DEBUG版本和RELEASE
版本的程序。
(3)#ifndef #define #endif
举例:
#ifndef __ASM_ARM_BITOPS_H // 如 果 不 存 在
asm-arm/bitops.h
#define __ASM_ARM_BITOPS_H //就引入asm-arm/bitops.h
...
头文件的内容
...
#endif /* _ARM_BITOPS_H */ // 否 则 不 引 入
asm-arm/bitops.h
这是为了避免重复包含bitops.h,因为当第一次包含这个头文件的
时候,会定义出__ASM_ARM_BITOPS_H宏,后续再次包含该头文件时,因
为已经有了该宏定义,文件#ifndef__ASM_ARM_BITOPS_H不会成立,所
以头文件不会被再次包含。
(4)#if defined , #ifdef 和 #if !defined, #ifndef,
#if defined (x)
...code...
#endif
这个#if defined它不管里面的 “x”的逻辑是 “真”还是 “假”它
只管这个程序的前面的宏定义里面有没有定义“x”这个宏,如果定义了
x这个宏,那么,编译器会编译中间的…code…否则直接忽视中间的…
code…代码。#if defined取反就是#if !defined。
#ifdef x与 #if defined(x)用法一致,#ifndef x和 #if !defined(x)
用法一致。
例:preprocess_test.c
#includestdio.h
#define
文档评论(0)