汕尾海湾 发表于 2024-6-11 20:40:18

【C语言】预处理详解(上卷)

前言

预处理也是C语言中非常重要的存在。那么就详细地来了解一下吧。
预定义符号

C语言设置了一些预定义符号,可以直接利用,预定义符号也是在预处理期间处理的。
   1        __FILE__        //举行编译的源文件
2        __LINE__        //文件当前的行号
3        __DATE__        //文件被编译的日期
4        __TIME__        //文件被编译的时间
5        __STDC__        //假如编译器遵循ANSI C,其值为1,否则未定义
利用演示:
 https://img-blog.csdnimg.cn/direct/1e6ed4d851db4037bd298fcf59486f70.png
(这个警告说明VS并没有完全遵循ANSI C )
https://img-blog.csdnimg.cn/direct/423642ab593948639c4904981652401e.png 

#define定义常量

基本语法:
#define name stuff name是名字,stuff是内容。
利用演示:

https://img-blog.csdnimg.cn/direct/0e43ef2a26ef4ed2a0c188dd8f9eed5d.png
在预编译阶段,M出现的地方都会被更换回2077,并且把#define M 2077这句删除。 
其实,我们前面的预定义符号也是同样的处理。在预编译阶段,预定义符号出现的位置会更换为内容。
#define也可以定义字符常量:
https://img-blog.csdnimg.cn/direct/b31b5db1488c4d3f871d9517ef48dd1f.png
 如许写数组也是可以的,不会报错:
https://img-blog.csdnimg.cn/direct/da88c8fecd8a431e8d1dea1fd10353b3.png
由于在预编译阶段就已经把M更换为77了。
我们甚至可以为了简写而利用#define定义常量:
 https://img-blog.csdnimg.cn/direct/e87f338542e2449cbe4f4f79eb01519d.png
以是它的利用其实是五花八门的,甚至可能会有一些奇葩的写法。
还可以定义一整段代码:
https://img-blog.csdnimg.cn/direct/ec9a1890563c4889970ed151f3c7e3ef.png
不外,我们可以通过续行符\,改造一下:
https://img-blog.csdnimg.cn/direct/f2815b03c00749e29bfcd725226b0d6f.png 
注意续行符在利用时\背面什么都不要加。\背面跟的是回车键,其实是转义了。 
利用分号?

注意,#define定义标识符的时间,背面不要加分号。有时间加上也不会有太大题目,但是不发起。加上可能会导致题目。
举个例子:
https://img-blog.csdnimg.cn/direct/f6c00f2f0a0f4cc8b56e5b90b5071846.png
这个更换的效果其实相称于:
int a = 2077;
;  也就是相称于:
int a = 2077;
; 两条语句,后一条是空语句。
但是如许的不出题目是偶然的。
但假如是如许去写:
https://img-blog.csdnimg.cn/direct/111a1fdb275f46e09c7830d2b20ebc65.png
这就出题目了。由于它相称于:
printf("%d\n",2077;);  以是给#define定义的常量内容背面加上;是百害无一利的,最好不要这么做。
 还有时间这种错误更加隐晦:
https://img-blog.csdnimg.cn/direct/8f5b8f248ce94d938e8aa513cc082a82.png
它相称于:
https://img-blog.csdnimg.cn/direct/1832b7e82aeb4e00a3d2814a8cfa2100.png 
 #define定义宏

 为了突出宏的重要性,笔者决定以单独一篇博客的方式来讲解宏,敬请等待。

到此,预处理详解(上卷)竣事,祝阅读愉快^_^

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 【C语言】预处理详解(上卷)