在命令行中使用GCC的-E选项对上面的程序进行预编译: text ```bash gcc -E program.c -o program.i ``` 这将生成一个名为program.i的文件,其中包含了预编译后的结果。 观察预编译后的输出,确认宏是否被正确打印或替换: 打开program.i文件,你会看到宏MAX和SQUARE(5)已经被替换为了它们的值或代码片段: ...
1、没有注释 2、注释了,就不会打印 关于c语言中条件编译相关的预编译指令: #define 定义一个预处理宏 #undef 取消宏的定义 #if 编译预处理中的条件命令,相当于C语法中的if语句 #ifdef 判断某个宏是否被定义,若已定义,执行随后的语句 #ifndef 与#ifdef相反,判断某个宏是否未被定义 #elif 若#if, #ifdef,...
下面来介绍一下本文的重头戏:各种预编译指令,预编译是一个强大的工具,要学会使用。 🌱2.1、预定义符号 首先介绍下C语言中内置的几个预定义符号 代码语言:javascript 复制 printf("%s\n",__FILE__);//打印当前编译源文件信息printf("%d\n",__LINE__);//打印当前的行数,为24printf("%s\n",__DATE__)...
3. sizeof(int)在预编译阶段是不会被求值的。只要知道“预编译阶段”在真正的“编译阶段”之前,就很容易理解了。预编译阶段只是对组成源代码中的字符进行作用,从某种意义上来说,它有时甚至不知道它的操作对象是什么,它只是按照既定的规则执行替换。sizeof(int),无论是sizeof的解析,还是类型的解析,都是在...
我们接下来对我们写的源文件test.c直接编译,然后生成了一个a.out的可执行程序,运行,我们看到成功打印了1到10的数字 但是我们刚刚直接完成了整个编译过程,并没有观察到其中的具体细节。 2.2.1 预处理(预编译) 下面我们就分别观察一下其中的细节: 首先我们利用gcc -E test.c -o test.i让程序在预编译(预处理...
实际上gcc hello.c可以分解为4个步骤,分别是预处理(Preprocess),编译(Compilation),汇编(Assembly)和链接(Linking)。 一、预处理 预处理过程主要读取c源程序,对伪指令和特殊符号进行处理。包括宏,条件编译,包含的头文件,以及一些特殊符号。基本上是一个replace的过程。
//如果编译器支持C99标准的话,可以用第二个宏。 intcount = 1; classCBase { public: CBase() { //打印当前行所在文件、行号、函数,以及其它信息。 TRACE_CMH_2("BASE: [%d]\n", count++); } }; classCSub :publicCBase { public:
使用宏printf(“XYZ”);//该段不打印”this is a test”而打印”XYZ”。因为预编译器识别出的是”XYZ” 如果串长于一行,可以在该行末尾用一反斜杠’\’续行。 #defineLONG_STRING"this is a very long\ string that is used as an example"
C语言源程序中允许用一个标识符来表示一个字符串,称为“宏”。被定义为宏的标识符称为“宏名”。在编译预处理时,对程序中所有出现的宏名,都用宏定义中的字符串去代换,这称为宏替换或宏展开。 宏定义是由源程序中的宏定义命令完成的。宏替换是由预处理程序自动完成的。
if (a > b) { if (a-b > 10) { //潜入if判断,a-b的值大于10则调用printf printf("%d\\n", a-b);//打印a-b的值 }} else { if (a%b == 1) { //此处大括号不可省写,因为内部包含多于1条语句 a = 100; printf("%d\\n", a%b); } else //此处大括号可以省写,因为只有一条函...