C 中未指定 return 类型的函数

Function without return type specified in C

我在 C:

中看到了这段代码
#include <stdio.h>
main( )
{
 int i = 5;
 workover(i);
 printf("%d",i);
}
workover(i)
int i;
{
 i = i*i;
 return(i);
}

我想知道函数"workover"的声明如何有效?当我们不提及函数的 return 类型时会发生什么? (我们可以 return 什么吗?)。参数也只是一个变量名,这是如何工作的?

如果不指定return类型或参数类型,C将隐式声明为int

这是早期版本的 C(C89 和 C90)的 "feature",但现在通常被认为是不好的做法。由于 C99 标准 (1999) 不再允许这样做,针对 C99 或更高版本的编译器可能会向您发出类似于以下内容的警告:

program.c: At top level:
program.c:8:1: warning: return type defaults to ‘int’
 workover(i)
 ^

函数声明语法在旧版本的 C 中使用,并且仍然有效,因此代码片段 "workover(i) int i;" 等同于 "workover(int i)"。虽然,我认为它可能仍会生成警告甚至错误,具体取决于您使用的编译器选项。

当我将你的代码编译为 $ gcc common.c -o common.exe -Wall (通过 Cygwin 终端尝试,因为我现在没有 linux 系统)

我收到以下警告:

common.c:3:1: warning: return type defaults to ‘int’ [-Wreturn-type]
main( )
^
common.c: In function ‘main’:
common.c:6:2: warning: implicit declaration of function ‘workover’ [-Wimplicit-f                  unction-declaration]
workover(i);
^
common.c: At top level:
common.c:9:1: warning: return type defaults to ‘int’ [-Wreturn-type]
workover(i)
^
common.c: In function ‘main’:
common.c:8:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^
  1. 第一个和第三个说 return type defaults to ‘int’ 这意味着如果您不指定 return 类型,编译器将隐式声明它为 int.
  2. 第二个说,implicit declaration of function ‘workover’ 因为编译器不知道 workover 是什么。
  3. 第三个警告很容易理解,如果您修复第一个警告,它就会消失。

你应该这样做:

#include <stdio.h>

int workover(int);

int i;

int main(void)
{
    int i = 5;
    workover(i);
    printf("%d",i);     //prints 5
    return 0;
}

int workover(int i)
{
    i = i*i;    //i will have local scope, so after this execution i will be 25;
    return(i);  //returns 25
}