#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语言将执行环境定义为两类:freestandinghosted.在这两种执行环境中,程序启动环境都会调用一个函数

在您的例子中,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, ut是替换列表中使用的第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, ut分别用参数m, a, in替换.

 m --> m  
 s --> a 
 u --> i 
 t --> n

C++相关问答推荐

为什么已经设置的值在C中被重置为for循环条件中的新值?

getchar读css + z还是返回css?

我应该如何解决我自己为iOS编译的xmlsec1库的问题?转换Ctx.first在xmlSecTransformCtxPrepare()之后为空

ZED for SDL上的C语言服务器

创建一个fork导致fget无限地重新读取文件

拥有3x3二维数组并访问数组[1][3]等同于数组[2][0]?

Char变量如何在不使用方括号或花括号的情况下存储字符串,以及它如何迭代到下一个字符?

是否可以使用指针算法在不对齐的情况下在 struct 中相同类型的字段的连续序列之间移动?

使用错误的命令执行程序

如何在下面的C代码中正确管理内存?

用C++实现余弦函数

不同原型的危险C函数是可能的

运行时错误:在索引数组时加载类型为';char';`的空指针

为什么我的二叉树删除删除整个左部分的树?

&stdbool.h&q;在嵌入式系统中的使用

我可以使用Windows SDK';s IN6_IS_ADDR_LOOPBACK等,尽管没有文档?

%g浮点表示的最大字符串长度是多少?

比 * 更快的乘法

我们可以在不违反标准的情况下向标准函数声明添加属性吗?

假设函数调用返回的 string(char *) 上有 free() 是否安全?