定义了两个宏LINK和POWER,LINK直接把两个宏变量拼接起来,所以n等于1234;POWER把两个宏变量和e顺次拼接,所以n2等于2e3,也就是等于2000。 3)使用注意 #和##在宏定义中使用时,它后面的参数如果也是一个宏,那么是不会展开的。如下面的例子: 这段代码是会编译报错的,LINK(A,B)这句只会展开成AB,而不会再往下...
解决这个问题的方法很简单. 加多一层中间转换宏. 加这层宏的用意是把所有宏的参数在这层里全部展开, 那么在转换宏里的那一个宏(_STR)就能得到正确的宏参数. #define A (2) #define _STR(s) #s #define STR(s) _STR(s) // 转换宏 #define _CONS(a,b) int(a##e##b) #define CONS(a,b) _...
这种方法使用户能以一个简单的名字代替一个长的字符串,因此把这个标识符(名字)称为"宏名” 在预处理时将宏名替换成字符串的过程称为"宏展开“。#define就是宏定义指令。 二,带参数的宏定义 带参数的宏定义不是仅仅进行简单的字符串替换,还要进行参数替换。其定义的一般形式为; #define 标识符(宏名)(参数表...
宏定义允许嵌套,在宏定义的字符串中可以使用已经定义的宏名。在宏展开时由预处理程序层层代换。 例如: #definePI 3.1415926#defineS PI*y*y/* PI是已定义的宏名*/ 习惯上宏名用大写字母表示,以便于与变量区别。但也允许用小写字母。 可用宏定义表示数据类型,使书写方便。 应注意用宏定义表示数据类型和用typede...
宏定义语句连接符 \ : 在C/C++宏定义中规定,宏定义只允许写在同一行,下一行就不属于这个宏定义了,而实际定义宏过程中,经常会出现较复杂的宏定义,较长,写在一行不易于读懂,需按逻辑关系断行编写,此时需要在行的末尾用连接符“\”进行连接,表示上下行属于同一行,即同属于这个宏定义。
其作用是:将宏定义中的传入参数名转换成用一对双引号括起来参数名字符串。其只能用于有传入参数的宏定义中,且必须置于宏定义体中的参数名前。说白了,他是给x加双引号:char* str = ToString(123132); ==> char* str="123132"; 如果你想要对展开后的宏参数进行字符串化,则需要使用两层宏。
首先,在C语言中,宏定义使用“#define”关键字进行定义,其语法格式为: ``` #define宏名称值 ``` 其中,宏名称是自定义的标识符,可以是任意有效的变量名或符号;值可以是任意的表达式、常量或代码片段。通过宏定义,我们可以将一些重复使用的代码片段定义为宏,以提高代码的重用性和可读性。 在使用宏定义时,需要注意...
在C语言程序中,宏定义“define”的一种有趣的用法 上述C语言程序,就是使用printf函数,在屏幕上输出“hello world”,在示例代码1中,代码变得认不出了,是因为在第3行到第9行,使用了“#define”宏定义语句,将“int”、“void”、“main”、“printf”、“return”等字样,替换为了不同长度的下划线。
这样HELLO就是定义为666,所有用到HELLO的地方,在预处理时都会被替换为666。 使用define 定义宏的基本用法见:C语言用#define定义宏的用法 这里主要介绍下宏定义中的特殊操作符,包括:#、##、...和__VA_ARGS__。 1、字符串化操作符 # 当需要把宏的参数 x 转换为字符串时,使用 #x 可以把参数名 x 转换成...