gpt4 book ai didi

c - 这段经过混淆的 C 代码声称可以在没有 main() 的情况下运行,但它到底做了什么?

转载 作者:太空狗 更新时间:2023-10-29 16:15:26 27 4
gpt4 key购买 nike

#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##tm、s、ut 是第 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、ut 被替换为参数 m、a、i n,分别。

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

关于c - 这段经过混淆的 C 代码声称可以在没有 main() 的情况下运行,但它到底做了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36449358/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com