c语言中undef,C/C++中常用的预处理方法 #define #undef #ifdef #endif

初学C语言时,经常会看见文件起始一句#define PI 3.1415之类的预处理语句,大部分国内教材没有再进一步介绍C其他的预处理语句。下面进行一些总结:

define

常规用法

#define macro-name replacement-text 又被称为宏替换,出现这一语句后,该语句之后所有宏均会被替换为replacement-text,包括在此文件后处理的文件。

在C程序生成流程中(C源程序->编译预处理->编译->优化程序->汇编程序->链接程序->可执行文件),宏替换发生在编译之前,可通过gcc -E选项验证。

注意,marco-name作为简单的被替换字段,无法求sizeof(),不占用运行时内存,在替换时由于编译器并不检查其所处位置,可能出现替换后运算顺序不符合预期的情况。这是一种十分隐蔽的错误。如#define x a+b。

建议在运算中使用const修饰符初始化需要的变量。

define带参数

例如#define MIN(a,b) (a

又例如#define PR(EX) cout << #EX <

这其中,“#EX”中的井号称为字符串化运算符,在预处理器中使用这个符号将把参数转换为一个字符数组。

ifdef #else #endif

用于对程序的某个部分进行有条件地编译,在调试一段代码时常用。用法:#define DEBUG // 注意不能使用NDEBUG,这是C中的关键字。

//...

#ifdef DEBUG

//调试代码,当DEBUG被define时进行编译

#else

//DEBUG没有被define时编译,可省略此部分

//...

#endif

//调试代码段结束

通过#undef DEBUG可以方便地取消标记的define。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值