#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()
函数之前创建的。
在我的讲座中,有一个关于如何创建函数原型(prototype)的示例,以及如何通过在 main()
函数之前声明它然后在 结束后定义它来创建它们>main()
函数。
运行上面的程序时,出现如下错误:
Line5: warning: return type of 'main' is not '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
都是无效的,会导致编译器输出警告消息。
当代码调用函数时,编译器需要知道被调用函数的签名。有两种方法可以告诉编译器被调用函数的签名是什么:
- 在调用函数之前列出整个函数
- 在调用函数之前有一个函数签名的原型(prototype)(又名前向引用)。在原型(prototype)中,编译器只需要返回的类型和参数的类型。但是,将参数名称列在原型(prototype)中是一种很好的编程习惯,以示对阅读代码的人的礼貌。
关于c - main() 前后的函数声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55984090/