【发布时间】:2012-11-26 09:11:53
【问题描述】:
我在理解 printf() 语句中宏函数调用的使用方面遇到了问题。
我有以下代码:
#include<stdio.h>
#define f(g,h) g##h
main()
{
printf("%d",f(100,10));
}
此代码输出“10010”作为答案。
我了解到宏函数调用只是复制粘贴宏函数代码来代替调用,并替换了参数。
所以代码应该是这样的:
#include<stdio.h>
#define f(g,h) g##h
main()
{
printf("%d",100##10);
}
但是当我用替换的宏单独执行上面的代码时,我得到了一个编译错误。
那么第一个代码如何给出 10010 作为答案,而第二个代码给出了编译错误?
【问题讨论】:
-
##确保参数被连接。因此:f(100,10) 被预处理器替换为:10010 -
## 仅在您的#define 语句中有效并且“无效”,除非该行以“#define [your stuff here]”开头,因为“#define”是指示编译器的内容专门处理那部分代码。
标签: c c-preprocessor