CC++宏替换详解 CC++宏替换详解 ⽬录 1. 基本形式 #define name replacement_text 通常情况下,#define指令占⼀⾏,替换⽂本是define指令⾏尾部的所有剩余部分,但也可以把⼀个较长的宏定义分成若⼲⾏,这时需要在待续的⾏末尾加上⼀个反斜杠符 ``。宏定义也可以带参数,这样可以对不同的宏调...
可以通过#define取消名字的宏定义,这样做可以保证后续的调用是函数调用,而不是宏调用: #undefgetcharintgetchar(void){...} 4. 宏参数、#和## 如果在宏定义的替换文本中,参数名以#作为前缀则结果将被扩展为由实际参数替换该参数的带引号的字符串。例如,可以将它与字符串连接运算结合起来编写一个调试打印宏: ...
替换只对记号进行,对括在引号中的字符串不起作用。例如,如果 YES 是一个通过 #define 指令定义过的名字,则在 printf("YES") 或 YESMAN 中将不执行替换。 替换文本可以是任意的,例如: #defineforever for (;;) /* infinite loop */ 该语句为无限循环定义了一个新名字 forever 。 宏定义也可以带参数,这样...
关键字: 简单的字符替换2,函数调用是在程序运行时处理的,分 配临时的内存单元;而宏展开则是在编译时进行的,在展开时并不分配内存单元,不进行值的传递处理,也没有“返回值”的概念。关键字:编译时进行,开时并不分配内存单元,也值的传递处理3,对函数中的实参和 形参都要定义类型,二者的类型要求一致,如不一致,...
在类函数宏的替换体中,#号作为一个预处理运算符,可以把记号转换成字符串。例如,如果x是一个宏形参,那么#x就是转换为字符串"x"的形参名。这个过程成为字符串化(stringizing)。 演示用例如下: /* subst.c -- substitute in string */ #include <stdio.h> #define PSQR(x) printf("The square of " #...
在C语言中,函数宏是一种非常有用的编程工具,它可以在代码中实现简单的代码替换,从而提高代码的可读性和重用性。函数宏替换是C语言中的一项重要特性,它允许开发人员定义一个类似函数的宏,并在代码中使用这个宏来实现一系列的操作。函数宏的替换是在预处理阶段完成的,在代码被编译之前,预处理器会将函数宏的定义替换...
将外部的文件引入到源代码中,然后我们就可以在源代码中使用外部文件中的函数、全局变量等等。下面聊一聊另一个用的比较多的预处理指令,宏定义指令。1. 什么是宏定义?宏定义又称为宏代换、宏替换,简称为宏。是 C 语言中最为常用的三种预处理指令之一。宏定义指令,是由 # 和关键字 define 组合而成的。宏定义...
2 #define只是单纯的“查找替换”把源代码变成另外的样子,并没有创造新的类型名称。 3 typedef是定义的一个类型名,编译器把它当作一种新的类型来看待。所以定义类型常用typedef 三、替换一个函数或表达式 表达式、函数也可以进行替换,在预处理期会变形成宏替换后的代码,然后进行编译 ...
首先我们的宏在编译阶段会直接和代码替换本次的宏就将printf函数内容进行了替换使SQUARE(3+2)替换成了3+2*3+2这样我们就得到了11的值。 所以使用宏的时候一定要加括号!加括号! #include<stdio.h> #define SQUARE(x) ((x) * (x)) ...
带参的宏 但是宏函数只是简单的文本替换,并不支持参数的类型检查,很容易出现各种各样的BUG,举个司空见惯的例子:#include <stdio.h> #define POW(x) x*x int main(){ int x = 3;printf("%d\n",POW(++x));return 0;} 我们的本意是先将变量x进行自增以后再作为参数带入到宏体,变量x自增后是4...