关于C的主要功能

时间:2013-09-19 16:52:59

标签: c

5.1.2.2.1 Program startup
The implementation declares no prototype for this function. It shall be defined
with a return type of int and with no parameters.

我已经定义了这样,

int main(int a, int b, int c){.......}

有效。我没理解第一行"The implementation declares no prototype for this function"

需要帮助,谢谢

4 个答案:

答案 0 :(得分:2)

当你制作一个原型时,这意味着你想在别处调用它而不是main函数的情况。

来自docs: -

  

5.1.2.2.1程序启动

     

1程序启动时调用的函数名为main。该   实现声明此函数没有原型。应该是   使用返回类型int定义并且没有参数:

     

int main(void){/ * ... * /}

     

或有两个参数(这里称为argc和argv,尽管如此)   可以使用名称,因为它们是它们所在的函数的本地名称   声明):

     

int main(int argc,char *argv[]){/ * ... * /}

     

或等效的; 9)或其他一些实现定义的方式。

答案 1 :(得分:2)

这意味着main未提前宣布。没有像

这样的行
int main(int argc, char*argv[]);

这意味着当你定义函数时,你可以假装它接受任何参数并返回你喜欢的任何类型,而不会出现编译器错误。

当然,main由操作系统调用,因此它希望您的定义与它用于传递参数的任何约定相匹配。实际上,除了在嵌入式系统上,你对main的定义必须与上面的匹配。

答案 2 :(得分:1)

{p> declaration or prototype不需要main功能

main以外的其他功能需要声明和 定义

int sum(int,int); //declaration
int sum(int a,int b) //definition
{
//body
}

答案 3 :(得分:1)

你遗漏了该部分标准的其余部分,我将引用C99标准草案,其中说:

  

或有两个参数(这里称为argc和argv,但可能有任何名称   使用,因为它们是声明它们的函数的本地函数):

int main(int argc, char *argv[]) { /* ... */ }
  

或等效的; 9)或其他一些实现定义的方式。

shall be defined是引用是重要的部分,它表示它必须遵循这两个签名之一,或者如果可用的话,某些特定于实现的签名将由编译器实现者定义。

如果我尝试在最新版本的clang中构建它,我会看到以下错误:

error: second parameter of 'main' (argument array) must be of type 'char **'
  int main(int a, int b, int c){}
error: third parameter of 'main' (environment) must be of type 'char **'