求助,字符串宏定义中,变量如何在宏中展开为字符串
例子程序如下,程序是网上找的,编译运行后输出的是 :PASTE= abcdefkjSS(n)
程序源码:
#include <stdio.h>
#define PASTE(n)"abcdefkj"#n
int main()
{
int n = 16;
printf("PASTE= %s",PASTE(n));
system("pause");
return 0;
}
也看到了这样的说法,但尝试了,DeviceID 这个是宏时,可以展开,如果定义为 int DeviceID = 0x33;输出结果就不能展开了
/*********************************
xxx@ubuntu:~/Desktop/NXP_Demo/driver/upload/gpio$ ./test
33
0x33
xxx@ubuntu:~/Desktop/NXP_Demo/driver/upload/gpio$ gcc -o test test.c
xxx@ubuntu:~/Desktop/NXP_Demo/driver/upload/gpio$ ./test
33
DeviceID
***********************************/
#include <stdio.h>
#define DeviceID 0x33
#define ID(x) #x
#define IDStr(x) ID(x)
int main(void)
{
printf("%0x\r\n", DeviceID);
printf("%s\r\n", IDStr(DeviceID));
return 0;
} 直接printf("%s\r\n", ID(DeviceID));这样行吗 宏是优先于变量的,你都已经赋给 int 型变量了,运行时可能改成其他数值,还想反着回去获得最初的宏?
那还要 sscanf 干啥 t3486784401 发表于 2020-11-8 00:24
宏是优先于变量的,你都已经赋给 int 型变量了,运行时可能改成其他数值,还想反着回去获得最初的宏?
那 ...
似懂非懂
仿佛是这样,宏是编译时候展开的,展开时还没有变量的概念,所以字符串无法把变量替换进去
#define PASTE(n)"abcdefkj"#n 展开后abcdefkjn,直接替换了,这个n当然不能被解析为变量了,所以我的需求是无法实现的
如果是宏 #define MIN(A,B) A < B ? A:B
程序中MIN(x,y) 会被替换为 x<y?x:y,所以这个是能解析的 zhugean 发表于 2020-11-7 14:08
直接printf("%s\r\n", ID(DeviceID));这样行吗
帖子说,嵌套的宏可能解析不了,解决方法就是分开写
页:
[1]