rmp*_*251 2 c function forward-declaration implicit-declaration
有人可以向我解释为什么以下编译:
int main()
{
int a = mymethod(0);
}
int mymethod(int b)
{
return b;
}
Run Code Online (Sandbox Code Playgroud)
但这不会:
int main()
{
mymethod(0);
}
void mymethod(int b)
{
return;
}
Run Code Online (Sandbox Code Playgroud)
我认为在 C/C++ 中需要前向声明,但这里有一个反例。隐式声明如何在 C 中工作?
我假设当您说它在第二个代码示例中不起作用时,您的意思是您遇到了编译时错误。
原因是当存在隐式函数声明时,假定采用固定数量的参数,并返回int。但是,mymethod()首先隐式声明,然后声明为 return void。这是一个错误,因为新声明与之前的(隐式)声明不匹配。
C90 (ANSI C89) 允许隐式函数声明。来自 C89,第 3.3.2.2 节:
如果函数调用中带括号的参数列表前面的表达式仅由一个标识符组成,并且没有对该标识符可见的声明,则该标识符被隐式声明,就像在包含函数调用的最里面的块中一样,声明
extern int 标识符();出现了。
但是,从 C99 开始,此限额已被取消(因此在 C11 中也被禁止)。C++ 从不允许隐式函数声明。
| 归档时间: |
|
| 查看次数: |
2658 次 |
| 最近记录: |