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

时间:2019-05-19 18:40:08

标签: c turbo-c

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

1 个答案:

答案 0 :(得分:2)

在严格符合要求的C代码中,main应该声明为以下值之一或等效值:

int main(void)

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

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

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

在不带任何参数的情况下运行该程序时,只会在argv[0]中传递该程序名称。由于只有程序名而没有参数,因此argc被设置为1。

main中一样,使用int main(main)作为参数名称是一种不好的做法,但是它没有特殊效果,除了会导致函数内部的标识符“ main”引用该参数,并且而不是功能。