在上面的代码中,我们定义了一个宏INT_TO_STR,它使用了#操作符来将传入的整型参数转换为字符串。然后,在main函数中,我们声明了一个整型变量num并赋值为123。接着,我们使用INT_TO_STR宏将num转换为字符串,并将结果赋值给str变量。最后,我们使用printf函数打印出转换后的字符串。 这种整型到字符串的转换在一些...
C 用宏可以转字符串与拼接字符。 举例 #include <stdio.h> #define CON(a) (B##a) //concatenate #define STR(a) #a enum{B0,B1}; int pt(int b) { printf("B%d\n",b); } int main() { printf("B" STR(0) " %d B1 %d\n",CON(0),CON(1)); pt(CON(0)); pt(CON(1)); } ...
在C语言中,宏参数的字符串化是指将宏参数转换为其对应的字符串字面量。这通常通过使用预处理运算符#来实现。 2. 解释C语言中宏参数的连接 宏参数的连接是指将两个或多个宏参数组合成一个新的字符串。这可以通过使用预处理运算符##来实现,它可以将两个记号(token)连接起来形成一个新的记号。 3. 展示如何在...
在C语言的宏中,#的功能是将其后面的宏参数进行字符串化操作(Stringfication),简单说就是在对它所引用的宏 变量通过替换后在其左右各加上一个双引号。比如下面代码中的宏: #define WARN_IF(EXP) \ do{ if (EXP) \ fprintf(stderr, "Warning: " #EXP "\n"); } \ while(0) 那么实际使用中会出现下...
在宏定义中,有时还会用到#和##两个符号,它们能够对宏参数进行操作。 #用来将宏参数转换为字符串,也就是在宏参数的开头和末尾添加引号。例如有如下宏定义: 1 #define STR(s) #s 那么: 1 2 printf("%s", STR(www.baidu.com)); printf("%s", STR("www.baidu.com")); ...
当我们将5和int传入到Malloc是,那么n就是5,type就是int,也就是有一个参数是类型,宏是可以实现的,但函数可以实现,预处理之后替换的结果就是(int*)malloc(5 * sizeof(int))。 宏和函数的对比: 在这里插入图片描述 二、#和##运算符 2.1 #运算符 #运算符是一个预处理器运算符,用于字符串化(Stringificatio...
项目中有个头文件中定义了一个宏定义,比如是 #define CFG_LOGGER_NAME uart 然后,在某个C文件中需要讲这个3转换成对应的字符串类型,即为"uart";很明显,如果按以下的几种方式定义,肯定得不到期望的结果: 方式1: #define CFG_LOGGER_NAME_STR "CFG_LOGGER_NAME" ...
(#x) // 将x变成字符串(如果x是宏,展开) #define _S(x) __S(x) // 将x变成字符串(如果x是宏,展开) #define _ST(x) __ST(x) // 将参数连接并转成字符串(遇宏则展开) #define _TO_STR(x, y) _S(x) "" _S(y) #define _TO_STRT(x, y) _T( _S(x) "" _S(y) ) bool ...
#符号把一个宏参数直接转换为字符串,例如 #define STRING(x) #x const char * str = STRING(test); // str的内容就是"test" ##符号会连接两边的值,像一个粘合剂一样,将前后两部分粘合起来,从而产生一个新的值,例如 #define VAR(index) INT_##index ...