我有没有理由在C程序中看不到main的原型,即:
int main(int argc, char* argv[]);
int main(int argc, char* argv[])
{
return 0;
}
似乎总是不一致..
答案 0 :(得分:10)
C语言标准,草案n1256:
5.1.2.2.1程序启动
1程序启动时调用的函数名为main
。 实施声明否 这个功能的原型。它应定义为返回类型int
且没有 参数:
int main(void) { /* ... */ }
或者有两个参数(这里称为argc
和argv
,但可能有任何名称 使用,因为它们是声明它们的函数的本地):
int main(int argc, char *argv[]) { /* ... */ }
或等效的; 9)或其他一些实现定义的方式。
强调我的。
答案 1 :(得分:6)
声明原型意味着你想在别处调用它,这对main()函数没有意义。
答案 2 :(得分:2)
不需要原型,因为main
不应该被其他程序调用(并且在C ++中调用main
实际上是被禁止的。)
答案 3 :(得分:2)
简单的原因是控件总是首先转到main。因此,编译器 会自动定位 ,因此它的原型是多余的,没有用处。
我们在定义之前调用函数时也会使用原型。因此,查看函数原型编译器可以判断调用是否合法。但是在main的情况下我们 习惯于提供其定义及其声明 (这在逻辑上也是正确的)因此不需要原型。
即使我们将c程序组织成多个文件,也不需要主的原型。
答案 4 :(得分:0)
原型的最初目的是支持对可以由单遍编译器处理的函数的正向引用。
换句话说,如果您有这样的事情:
void function_A(){
printf( "%d", function_B( 5 ) );
}
int function_B( int x ){
return x * 2;
}
function_B在定义之前被调用。这将为简单的编译器带来问题。为了避免这些问题,请将原型放在文件的开头,以确保编译器提前知道文件中的所有功能,因此正向引用对于类型检查不是问题。
由于main函数的所有有效形式都是编译器事先知道的,因此没有必要创建原型,因为编译器可以在没有main。()的情况下类型化对main()的正向引用。