c - main() 前后的函数声明
问题描述
#include <stdio.h>
int add2nums( int, int);
void main(void)
{
int y,a,b;
printf("Enter 2 numbers\n");
scanf("%d%d", &a, &b);
y = add2nums(a,b);
printf("a is %d\n", a);
printf("b is %d\n", b);
printf("y is %d\n", y);
}
int add2nums( int num1, int num2)
{
int sum;
sum = num1 + num2;
return(sum);
}
所以通常,当我在 C 中创建新函数时,函数的定义是在函数之前创建的main()
。
在我的讲座中,有一个如何创建函数原型以及如何通过在函数之前声明它然后在main()
函数结束之后定义它来创建它们的示例main()
。运行上述程序时,出现以下错误:
第 5 行:警告:'main' 的返回类型不是 'int' [-Wmain]|
怎么了?为什么函数的声明在没有参数的情况下add2nums()
出现两次main()
?
int add2nums( int, int);
然后在main()
参数结束num1
后再次num2
int add2nums( int num1, int num2)
解决方案
该函数有两个有效的签名main()
:
int main( void )
int main( int argc, char *argv[] )
请注意,两个有效签名的返回类型都是int
. 任何其他返回类型,例如void
无效并导致编译器输出警告消息。
当代码调用函数时,编译器需要知道被调用函数的签名。有两种方法可以告诉编译器被调用函数的签名是什么:
- 在调用它的位置之前列出整个函数
- 在调用函数之前有一个函数签名的原型(又名前向引用)。在原型中,编译器只需要返回的类型和参数的类型。但是,在原型中列出参数的名称是一种很好的编程习惯,作为对阅读代码的人的礼貌。
推荐阅读
- python - python穷举组合
- facebook-messenger - 无法在 Messenger 的桌面上加载 webview
- jenkins - 在 Jenkins 中提供构建路径时出现此错误。我正在使用 Jenkins 在 Hockey 应用程序上配置构建部署!如何解决问题?
- c++ - 当我使用“使用 std::cout;”时,它仍然被认为是不好的做法吗?等等?
- windows - 用随机照片替换 Windows 锁屏图片的 Windows 脚本
- yii2 - 使用 yii\db\Query 时为值添加前缀
- git - Visual Studio - Git 用户信息
- office-js - 是否有任何最佳实践如何检测应用程序的首次运行?
- regex - 如何在颤动中显示正则表达式结果
- ios - 在单元格容器内部/外部的单元格内容上拖动动画