#include <stdio.h>
#define decode(s,t,u,m,p,e,d) m##s##u##t
#define begin decode(a,n,i,m,a,t,e)
int begin()
{
printf("Ha HA see how it is?? ");
}
这是间接呼叫main
吗?多么?
#include <stdio.h>
#define decode(s,t,u,m,p,e,d) m##s##u##t
#define begin decode(a,n,i,m,a,t,e)
int begin()
{
printf("Ha HA see how it is?? ");
}
这是间接呼叫main
吗?多么?
C语言将执行环境定义为两类:freestanding和hosted.在这两种执行环境中,程序启动环境都会调用一个函数
在您的例子中,main
由预处理器定义隐藏.begin()
将扩大到decode(a,n,i,m,a,t,e)
,进一步扩大到main
.
int begin() -> int decode(a,n,i,m,a,t,e)() -> int m##a##i##n() -> int main()
decode(s,t,u,m,p,e,d)
是具有7个参数的参数化宏.此宏的替换列表为m##s##u##t
.m, s, u
和t
是替换列表中使用的第4参数、第1参数、第3参数和第2参数.
s, t, u, m, p, e, d
1 2 3 4 5 6 7
睡觉毫无用处.传递给decode
的参数是"a,n,i,m,a,t,e",因此,标识符m, s, u
和t
分别用参数m, a, i
和n
替换.
m --> m
s --> a
u --> i
t --> n