c - Hello world 加密对 main 的递归调用

标签 c recursion program-entry-point

我发现一段代码很奇怪,我说那是因为对 main 进行递归调用,这对我来说是新事物,因此我要求提供有关它的信息,最重要的是,我想详细解释用于打印 hello 的方法世界,如果不是太麻烦。程序如下:

#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/

相关文章:

c - main() 函数的返回类型

C - 保持打印终端输出到位

java - C 内存泄漏与 packetsender 套接字

c++ - ffmpeg:将 AVPixelFormat 视为 Int?

angular - 根据响应递归组合 HTTP 结果

java - IntelliJ IDEA 无法识别 forEach 调用中的方法递归

c - C 中的 main 函数有 void 和没有 void

java - IntelliJ 问题 -> 无法创建名称为 "Main"的类

c - 打印列表时省略最后一个逗号

c++ - 为什么我的 C++ 程序中会出现死循环?