c - 为什么C中void main函数内的参数值初始化为1?

标签 c turbo-c

#include<stdio.h>
#include<conio.h>
#include<math.h>

void main(main) {
    clrscr();
    printf("%d",main +=pow(++main,++main));
    getch();
}

所以,我在turboC编译器中运行了上面的代码,得到了输出12。我注意到这里main的值总是初始化为1。所以我想知道为什么它的值是1?为什么没有别的东西?请任何人帮助我:)

注意:我还尝试用 x、y 等其他名称更改参数“main”的名称。值仍然为 1,并且输出也相同,即 12。

最佳答案

在严格一致的 C 代码中,main 应声明为以下之一或等效内容之一:

int main(void)

int main(int argc, char *argv[])

当使用后者声明 main 时,argv 包含指向字符串(的第一个字符)的指针,而 argc 包含字符串的数量。 argv 中的此类指针。 argv[0]代表程序名称,后面的元素是程序的参数。

您的编译器接受一种非常古老的语法,其中可以在声明中省略类型。因此,int main(x) 声明 xint 类型的参数。这并不严格符合 C,但您的编译器正在接受它。

当您运行不带参数的程序时,仅传递 argv[0] 中的程序名称。由于只有程序名称而没有参数,因此 argc 设置为 1。

使用main作为参数名称,如int main(main),是不好的做法,但它没有特殊效果,除了会导致标识符“main” ” 在函数内部引用参数而不是函数。

关于c - 为什么C中void main函数内的参数值初始化为1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56210895/

相关文章:

c - 如何在循环中连续打印变量并在 linux 下的 C 中按一下转义键终止?

c - C 中的三元条件运算符

c - 在调用函数后定义变量给我一个编译错误

c - graphics.h 程序未在 Dosbox Windows 7 环境中运行

c - C 中元音变音 'A' 的用途或等效项是什么?

c++ - Printf %X 标识符 - 指针的奇怪行为

在 AIX 上使用 ioctl 的网络接口(interface)的硬件地址

c - execvp 和读取命令参数

c - 访问通过引用接收的结构体的成员

c - 为什么用GCC编译的程序不能用DOSbox运行而用Borland(Turbo C)编译的程序可以?