首页 > 解决方案 > 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)

标签: cfunctiondeclaration

解决方案


该函数有两个有效的签名main()

int main( void )
int main( int argc, char *argv[] )

请注意,两个有效签名的返回类型都是int. 任何其他返回类型,例如void无效并导致编译器输出警告消息。

当代码调用函数时,编译器需要知道被调用函数的签名。有两种方法可以告诉编译器被调用函数的签名是什么:

  1. 在调用它的位置之前列出整个函数
  2. 在调用函数之前有一个函数签名的原型(又名前向引用)。在原型中,编​​译器只需要返回的类型和参数的类型。但是,在原型中列出参数的名称是一种很好的编程习惯,作为对阅读代码的人的礼貌。

推荐阅读