C语言 预处理 ##运算符 错误问题
#include <stdio.h>
#define XNAME(n) x ## n
#define PRINT_XN (n) printf("x", #n "=%dn",x ##n);
int main(void)
{
int XNAME(1) = 14;//NXAME改为14
int XNAME(2) = 20; //NXAME改为20
PRINT_XN(1);//PRINT_XN改为printf(x1 "=%dn",x1)
PRINT_XN(2);//PRINT_XN改为printf(x2 "=%dn",x2)
return 0;
#define XNAME(n) x ## n
#define PRINT_XN (n) printf("x", #n "=%dn",x ##n);
int main(void)
{
int XNAME(1) = 14;//NXAME改为14
int XNAME(2) = 20; //NXAME改为20
PRINT_XN(1);//PRINT_XN改为printf(x1 "=%dn",x1)
PRINT_XN(2);//PRINT_XN改为printf(x2 "=%dn",x2)
return 0;
}
这个代码是照着书籍里面的代码打的为什么会出现这样的错误 求大牛们指教一下
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
我说下宏的原理,看看能不能加深理解。
所谓宏,不管语法有多少细节,它做的就是操作源代码的文本。
输出就是hello world
gcc -E xxx.c就能看到宏替换后的效果
我说呢怎么会n会被替换掉 我自己在慢慢琢磨把 但是还是要谢谢你 哈
@捣蛋 -E 把展开的理解一下,就知道哪错了。哈。
我可不会帮你改。改了也白改。最多在帮你展开一下测试。另外我要更正下我上面的一个描述错误。在"" 内的n 是不会被替换的。哈。
你使用 gcc -E 的选项,展开试试就知道了。无非额外提醒你,你的 ( 貌似错了。哈哈。
我还是不太明白 你意思是说n会替换掉n? 那如果要用宏定义输出进行换行要怎么办? 然后我把n去掉后还是会报错 这个代码要怎么改你能不能帮我改改
哈, 顺带搜了下我自己的代码库,贴两段,
另一段是使用上述定义的地方:
不知道是否对你有帮助。。。哈。
额外你的 PRINT的定义就有错误。建议搞c的新手,自己写个宏替换操作的代码出来。其实不难,而且更容易理解宏。