C语⾔宏定义时#(井号)和##(双井号)的⽤法 C语⾔中如何使⽤宏C(和C++)中的宏(Macro)属于编译器预处理的范畴,属于编译期概念(⽽⾮运⾏期概念)。下⾯对常遇到的宏的使⽤问题做了简单总结。关于#和## 在C语⾔的宏中,#的功能是将其后⾯的宏参数进⾏字符串化操作(String...
(1)宏中包含特殊符号:#、##. (2)宏定义用do{ }while(0) 2、特殊符号#、## (1)# Whenyouputa#beforeanargumentinapreprocessor macro,thepreprocessorturnsthatargumentintoacharacterarray. 在一个宏中的参数前面使用一个#,预处理器会把这个参数转换为一个字符数组 简化理解:#是“字符串化”的意思,出现在宏...
预处理器将源程序文件中出现的对宏的引用展开成相应的宏定义,即本文所说的#define的功能,由预处理器来完成,这里是单纯的替换与展开 避免头文件重复引用 #ifndefINCLUDE_NAME_H#defineINCLUDE_NAME_H//头文件内容#endif define中的三个特殊符号:#,##,#@ #defineConn(x,y) x##y#defineToChar(x) #@x#defi...
定义的宏以后的代码都可以使用这个宏,直到#undef 取消这个宏定义 宏表达式没有任何的“调用”开销, 宏表达式可以嵌套, 但是不能出现递归; 宏展开使源程序变长,函数调用不会; 另外要注意,宏定义中的返回值,因为有时候宏定义是没有返回值的,但是对于printf 函数,是有返回值的,这里要注意程序中对于返回值的使用; ...
宏定义中,##的作用是当func()传递的只有一个参数时, 这时宏定义展开多出来一个"," ,##的作用就是消除这个多余的逗号,当传递的参数多余两个时,##不起作用。 "..." "..."表示有多个参数 例: definefunc(fmt,args...)printf(fmt,##args)definefunc(fmt,...)printf(fmt,##__VA_AGRS__) ...
1、#define宏定义 以#号开头的都是编译预处理指令,它们不是C语言的成分,但是C程序离不开它们,#define用来定义一个宏,程序在预处理阶段将用define定义的来内容进行了替换。因此在程序运行时,常量表中并没有用define定义的常量,系统不为它分配内存。define定义的常量,预处理时只是直接进行了替换,,它用来将一个标识...
宏定义中:参数名,即为形参,如#define sum(a,b) (a+b);中a和b均为某一参数的代表符号,即形式参数。 而##的作用则是将宏定义的多个形参成一个实际参数名。 如: #define exampleNum(n) num##n int num9=9; 使用: int num=exampleNum(9); 将会扩展成 int num=num9; ...
在某些C语言代码中,有时我们可能会看到宏定义中带有#、##,这些符号有特殊的作用,下面我们用几个简单的例子来说明。 1)一个#的作用 一个#的作用就是把后面的参数当做一个字符串,也就是说等同于把后面的宏变量加上双引号: 运行上述代码,可以得到输出: ...
2、宏定义中特殊符号的含义 宏定义语句连接符 \ : 在C/C++宏定义中规定,宏定义只允许写在同一行,下一行就不属于这个宏定义了,而实际定义宏过程中,经常会出现较复杂的宏定义,较长,写在一行不易于读懂,需按逻辑关系断行编写,此时需要在行的末尾用连接符“\”进行连接,表示上下行属于同一行,即同属于这个宏定义...