#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)
答案 0 :(得分:2)
main()
函数有两个有效的签名:
int main( void )
int main( int argc, char *argv[] )
请注意,两个有效签名的返回类型均为int
。其他任何返回类型,例如void
都无效,并且会导致编译器输出警告消息。
当代码调用一个函数时,编译器需要知道该调用函数的签名。有两种方法可以告诉编译器被调用函数的签名是什么:
答案 1 :(得分:1)
main
函数具有签名int main()
,该签名使您可以将值返回给OS,但是您制作的main()
却没有{{1} }返回类型。因此,您得到了警告。void
只是函数的声明,它使编译器可以引用该函数。那是因为编译器只读取一次文件。答案 2 :(得分:1)
函数的声明是编译器的信息(不是链接程序,而是另一个答案),即函数的参数是什么类型,返回值是什么类型。
因此不需要参数名称。