C语言预处理器

11 篇文章 0 订阅

调试环境:vs2015+win10

C预处理器就是将源文件经过一些简单的处理,最常用的是删除注释、处理#include指令和处理#define指令。

文件包含

#include指令:用于在编译期间把指定文件的内容包含仅当前文件中,这样可以使大量的指令和声明更加方便。
引入方式:

#include<filename>//引入库里面的文件
#include"filename"//首先会在本地文件里面查找,未找到在去库里面查找

作用就是将文件中的内容复制到本文件中,整合成一个文件。
在filename中一般存放引入的其他文件声明、宏定义、extern声明、全局变量、函数声明、结构体定义。

宏替换

宏定义形式:#define 名字 替换文本
此条语句之后所有出现名字记号的地方都将被替换为替换文本,如果替换文本比较长可以使用’\’当做续航符。
宏定义对双引号之间的内容不影响,如果不想使用该宏定义可以使用“#undef 名字 ”来取消宏定义。

使用宏定义时应该是注意它的使用方法。
如果宏定义带了参数使用时就应该注意以下两点:
每个参数在使用时需要用圆括号括起
传参时不能传带副作用的参数,如:自加、自减运算

#define max(a,b) a>b?a:b 
#define div(a) a/a
//上面两种情况都会引发错误
//如果传入带有副作用的参数如i++,上下两个宏都会返回错误的值
//如果第二个宏传入参数是2+3,则会被翻译成2+3/2+3,这样结果与实际结果大相径庭

//为了不出现上述的情况,传参时有以下要求:
//不要传带有副作用的参数,如自加、自减运算
//在宏里面每一个参数都应该用圆括号括起,必要时每个子句也应用圆括号括起

在宏里面提供了“#”和“##”运算符
“#“:防止该变量与替换文本相同,使用它可以不用转换
“##”:在宏里面可以使用它,将两个字符串连接起来

详细内容可以访问查看本篇博客:http://blog.csdn.net/baidu_27435045/article/details/52948354

条件包含

在预处理阶段使用条件语句对预处理进行控制
通常使用

#if         //与if相同
#ifundef    //如果没有定义
#else       //与else相同
#elif       //与else if相同
#endif      //结束最近的一个#if或#ifundef

例如

#ifundef __BUG_TEST__
#define __BUG_TEST__
    //do something
    #if __TEST_a__==a
        //do something
    #elif __TEST_a__==b
        //do something
    #endif
#endif

上面的代码可以防止头文件重复引用,是一种非常实用且常见的方式。

如何选择是程序猿自己根据具体情况所定,毕竟程序猿都是有个性的。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值