我发现了一个相当奇怪的代码,我说,因为对main进行了递归调用,这对我来说是一个新的东西,因此我要求它的信息,最重要的是我想详细解释一下用于打印hello world的方法,如果不是太麻烦的话。程序如下:
#include <stdio.h>
int main(void)
{
static int i = 0xc;
putchar(*("\x1\x22\x22\x70\x65\x6f\x76\x6e\x21\x62\x6d\x70\x69" + i--) - 1);
return i ? main() : 0;
}
谢谢
最佳答案
递归调用main
是完全合法的。
输出"hola mundo!!"
关键字符串是
"\x1\x22\x22\x70\x65\x6f\x76\x6e\x21\x62\x6d\x70\x69"
这和
"\0!!odnum aloh"
移位一个字符(即用
i
代替h
,p
代替o
,等等),即:"\x1\"\"peovn!bmpi"
那么,
(*("\x1\x22\x22\x70\x65\x6f\x76\x6e\x21\x62\x6d\x70\x69" + i--)
与
"\x1\"\"peovn!bmpi"[i--]
因此每个
putchar
从右到左输出字符串中的一个字符减去一。关于c - Hello World加密对main的递归调用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29242036/