我发现了一个相当奇怪的代码,我说,因为对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代替hp代替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/

10-11 16:45