标准C 语言提供的一些标准预定义宏如表 1 所示。 表1 常用的标准预定义宏 除标准 C 语言提供的标准宏之外,各种编译器也都提供了自己的自定义预定义宏。可以通过表 2 所示的指令来查看不同编译器对预定义宏的支持情况。 表2 不同编译器的预定义宏查看指令 对于这些预定义宏的应用,基本上随处可见,下面举例介绍。
1 内置的宏定义 这些宏在代码中可直接调用。 示例代码 cout << "程序最后编译日期宏 " << __DATE__ << endl; cout << "程序最后编译时间宏 " << __TIME__ << endl; cout << "当前行数宏 " << __LINE__ << endl; cout << "当前运行文件名宏 " << __FILE__ << endl; cout << "...
1 内置的宏定义 这些宏在代码中可直接调用。 示例代码 cout <<"程序最后编译日期宏 "<< __DATE__ << endl; cout <<"程序最后编译时间宏 "<< __TIME__ << endl; cout <<"当前行数宏 "<<__LINE__<< endl; cout <<"当前运行文件名宏 "<<__FILE__<< endl; cout <<"当前运行函数宏 "<<...
其中,__FILE__、__LINE__、__FUNCTION__这三个宏是编译器内置宏定义,分别代表调试信息所在文件、...
C语言中的NULL就是一个语言已经预定义的宏。预定义指的是你不必亲自定义,编译器在编译时,已经提前定义好了。 SYSTEM_API这个宏没有定义任何值,替换后等价于什么都没写,比如像下面两条语句就是等价的。 class SYSTEM_API CSystem; 和 class CSystem; ...
有时候先定义了宏,后面我又重新定义了和宏名一样的变量,会发生什么情况呢?这里编译器会给变量 N 标出红色波浪线,给出错误提示:应输入标识符。因为宏定义了 N 为 5,那么在编译器中有出现的 N 的地方都会被替换成数字 5。所以这里就变成 5=3,很显然 5 不符合标识符的规则,就会报错。那么该怎么解决...
4. 删除宏定义指令 有时候先定义了宏,后面我又重新定义了和宏名一样的变量,会发生什么情况呢? #define N 5intN=3; 这里编译器会给变量 N 标出红色波浪线,给出错误提示:应输入标识符。 因为宏定义了 N 为 5,那么在编译器中有出现的 N 的地方都会被替换成数字 5。所以这里就变成 5=3,很显然 5 不符...
编译行为控制指令:c语言预处理指令轻松学(2)pragma指令控制编译器的行为 诊断指令和行号控制指令 C语言预处理轻松学(3)诊断指令、行号指令与预定义宏 今天我们介绍一下宏文本替换指令的相关用法。C语言的宏文本替换,是通过预处理指令define实现的,#define的使用场景主要有:1)直接使用标识符不定义具体常量的标识...
在C语言中,宏是在预处理阶段展开的,而不是在编译阶段。编译器在编译源代码之前会先对宏进行展开,然后再进行编译。要对宏进行编译,需要先定义宏,然后在源代码中使用该宏。编译器会在预处理阶段将宏展开。下面是一个示例:#include <stdio.h> #define
---若-DMAX=1, 则正确编译. ---若-DMAX的值被指定为不为1的值, 那么gcc会给出MAX宏被重定义的警告, MAX的值仍为1. 注意: 若在调用gcc的命令行中不显示地给出对象宏的值, 那么gcc赋予该宏默认值(1), 如: -DVAL == -DVAL=1 (3) #define所定义的宏的作用域 ...