【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]