#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 语言将执行环境定义为两类:独立 和托管。在这两个执行环境中,一个函数被环境调用以启动程序。
在独立 环境中,程序启动函数可以实现定义,而在托管 环境中,它应该是main
。在定义的环境中,如果没有程序启动功能,C 中的任何程序都不能运行。
在您的例子中,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、第 1st、第 3rd 和替换列表中使用的第 2 个nd 参数。
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
关于c - 这段经过混淆的 C 代码声称可以在没有 main() 的情况下运行,但它到底做了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36449358/