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]
}
^
- 第一个和第三个说
return type defaults to ‘int’
这意味着如果您不指定 return 类型,编译器将隐式声明它为 int
.
- 第二个说,
implicit declaration of function ‘workover’
因为编译器不知道 workover
是什么。
- 第三个警告很容易理解,如果您修复第一个警告,它就会消失。
你应该这样做:
#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
}
我在 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]
}
^
- 第一个和第三个说
return type defaults to ‘int’
这意味着如果您不指定 return 类型,编译器将隐式声明它为int
. - 第二个说,
implicit declaration of function ‘workover’
因为编译器不知道workover
是什么。 - 第三个警告很容易理解,如果您修复第一个警告,它就会消失。
你应该这样做:
#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
}