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

前言

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

预定义符号

C语言设置了一些预定义符号,可以直接使用,预定义符号也是在预处理期间处理的。

1        __FILE__        //进行编译的源文件

2        __LINE__        //文件当前的行号

3        __DATE__        //文件被编译的日期

4        __TIME__        //文件被编译的时间

5        __STDC__        //如果编译器遵循ANSI C,其值为1,否则未定义

使用演示:

 

(这个警告说明VS并没有完全遵循ANSI C )

 

#define定义常量

基本语法:

#define name stuff

name是名字,stuff是内容。

使用演示:

在预编译阶段,M出现的地方都会被替换回2077,并且把#define M 2077这句删除。 

其实,我们前面的预定义符号也是同样的处理。在预编译阶段,预定义符号出现的位置会替换为内容。

#define也可以定义字符常量

 这样写数组也是可以的,不会报错:

因为在预编译阶段就已经把M替换为77了。

我们甚至可以为了简写而使用#define定义常量:

 

所以它的使用其实是五花八门的,甚至可能会有一些奇葩的写法。

还可以定义一整段代码

不过,我们可以通过续行符\,改造一下:

 

注意续行符在使用时\后面什么都不要加。\后面跟的是回车键,其实是转义了。 

使用分号?

注意,#define定义标识符的时候,后面不要加分号。有时候加上也不会有太大问题,但是不建议。加上可能会导致问题。

举个例子:

这个替换的效果其实相当于:

int a = 2077;;

 也就是相当于:

int a = 2077;
;

两条语句,后一条是空语句。

但是这样的不出问题是偶然的。

但如果是这样去写:

这就出问题了。因为它相当于:

printf("%d\n",2077;);

 所以给#define定义的常量内容后面加上;是百害无一利的,最好不要这么做。

 还有时候这种错误更加隐晦:

它相当于:

 

 #define定义宏

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

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

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-06-09 01:30:03       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-09 01:30:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-09 01:30:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-09 01:30:03       18 阅读

热门阅读

  1. 一千题,No.0049(跟奥巴马一起编程)

    2024-06-09 01:30:03       11 阅读
  2. 一些关于机器学习的思路和猜测

    2024-06-09 01:30:03       8 阅读
  3. Python代码——压缩整个文件夹

    2024-06-09 01:30:03       10 阅读
  4. rust结构体

    2024-06-09 01:30:03       7 阅读
  5. 最小二乘法-拟合平面方程

    2024-06-09 01:30:03       9 阅读
  6. 内网中redis无法连接访问问题

    2024-06-09 01:30:03       10 阅读