首页 > 解决方案 > 为什么 C 中 void 主函数内的参数值初始化为 1?

问题描述

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

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

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

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

标签: cturbo-c

解决方案


在严格符合 C 代码中, main 应声明为以下之一或等效项:

int main(void)

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

main用后者声明时,argv包含指向字符串(的第一个字符)argc的指针,并包含argv. argv[0]表示程序名,后面的元素是程序的参数。

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

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

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


推荐阅读