c - 递归main函数分析

标签 c gcc gcc4.7

在学习C语言面试题时在某个网页上看到以下程序,我想知道我的分析是否正确?

 #include<stdio.h>
 #include<stdlib.h>

 void main(int j)
 {
     printf("%d\n",j);
     (&main + (&exit - &main)*(j/1000))(j+1);
 }

我的分析是,最初主要的参数是参数计数,所以首先 1将打印在屏幕上,接下来有一个对 main 的递归条件调用 (&main + (&exit - &main)*(j/1000))(j+1);在此&exit大于&main ,所以我们在这里获得一些值,它乘以 j/1000表示直到 j小于 1000 (&exit - &main)*(j/1000) 的值最终为零 main函数被调用,因此数字来自 1,2,3,-----1000将被打印。

一次j变成1001 (&exit - &main)*(j/1000) 的值将变成(&exit - &main)*1地址将为 (&main + &exit - &main)(j+1);exit的地址函数使程序退出打印 1 to 1000 .

这是我对这个程序的分析,我想知道我对这个程序的分析是否正确。

最佳答案

该程序具有未定义的行为,因为附加 operator -没有为函数指针定义。

此外,结果目标文件中的函数顺序未定义。

函数 main 的返回类型也应为 int。

关于c - 递归main函数分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27803747/

相关文章:

c++ - gcc nullptr 问题

c++ - 构建 gcc 4.7 后 Clang 3.2 构建损坏

c++ - 简单乘以 float 1000 * 0.01 = 9 的舍入错误

c++ - 在 Linux 上编译 C++ 代码。需要使用 gcc/4.7.2。找不到标准库

c - MPI 笛卡尔拓扑 - MPI_Gather 等效吗?

c - FFTW 结果与 MATLAB 中的 FFT 不同

c - 如何使用 GCC 在绝对地址处声明变量?

python - 安装pyipopt的问题

c++ - 高级 C 或 C++ 书籍

字符到字符* 错误消息