博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C语言难点2之预处理器
阅读量:6003 次
发布时间:2019-06-20

本文共 1176 字,大约阅读时间需要 3 分钟。

C语言难点2之预处理器

1 预处理阶段
在预处理阶段中,C预处理器在源代码编译之前对其进行一些文本性质的操作。它的主要任务包括删除注释,插入被#include指定包含的文件的内容,定义和替换由#define指令定义的符号一起确定代码的部分内容是否应该根据一些条件编译指令进行编译。
 
 
2 #define命令
 
采用宏定义时候的易错点:
 
格式:
     #define  name  stuff
有了这条指令之后,每当有符号name出现在这条指令后面时,预处理器就会把它替换成stuff。
 
注意:宏定义后面不能加上分号;
 
#define机制包括了一个规定,允许把参数替换到文本中,这周实现通常称为宏或者定义宏;
格式:
     #define      name(parameter-list)     stuff
 
其中,parameter list是UI个由符号分割的符号列表,他们可能出此案在stuff中。
注意:(1)参数列表的左括号必须与name紧邻。如果两者之间由任何空白存在,参数列表就会被解释成stuff的一部分。
      (2)注意括号的使用,由于运算顺序的不同,加不加括号会直接影响结果的。
举例:

 

 3 #define替换步骤
 

 

4 把宏参数插入到字符串中
两种技巧:
首先,邻近字符串自动连接的特性使我们很容易吧一个字符串分成几段,没段实际上都是一个宏参数。
例如:
 
第二个技巧使用预处理器把宏参数转换成一个字符串,#argument这种结构被预处理器翻译为“argument”。这种
例如:
 
 
注意,一种用的比较奇特的是使用##结构,它把位于它两边的符号连接成为一个符号。作为用途之一,它允许宏定义从分离的文本片段创建标识符。
例如:
 

 

 
5 带副作用的宏参数
就是参数每次使用的时候都会是最初始的数值,不会因为处理的变化而变化,我们在上面的第2部分谈到过。
 
 6 宏和函数的比较
 
 

 

7 #undef命令
 
指令格式
     #undef name
如果一个现存的名字需要被重新定义,那么它的旧定义首先必须用#undef移除。
 
 
8 条件编译

 

完整的语法:

 

9 是否被定义
有时候需要判断一个符号是否被定义,使用如下语句中的任意一句都可以

 

 

10 文件包含
#include指令:预处理器删除这条指令,并用包含文件的内容取而代之。
 
如果一个头文件被包含到10个源文件中,它实际上被编译了10次。
 
库函数包含:#include <filename>
本地文件包含:#include "filename"
 
 
11 其他的指令
错误指令: #error    text of error message    这个指令允许你生成错误信息
 
#line 指令  : #line   number "string"

 

12 编程提示的总结

 

 

 

 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

转载于:https://www.cnblogs.com/tao-alex/p/5982563.html

你可能感兴趣的文章
RISC-V: custom instruction and its simulation(转)
查看>>
HDU 5366 The mook jong
查看>>
Unity ScriptableObject自定义属性显示
查看>>
【开源】简单4步搞定QQ登录,无需什么代码功底【无语言界限】
查看>>
ORACLE内存管理之ASMM AMM
查看>>
移动前端常用meta标签
查看>>
非结构化数据与结构化数据提取---多线程爬虫案例
查看>>
splay版
查看>>
unity 打包编译记录
查看>>
CSS知识总结(四)
查看>>
软件工程第一次作业
查看>>
22. Generate Parentheses
查看>>
MDL相关总结
查看>>
11.表达式语言
查看>>
3.数据校验和SpringEL
查看>>
面向对象编程-何为对象
查看>>
L2TP/IPSec一键安装脚本
查看>>
android以json形式提交信息到服务器
查看>>
CetnOS 6.7安装Hive 1.2.1
查看>>
最短最优升级路径(完美世界2017秋招真题)
查看>>