有些时候我看到函数的定义如下:
read_dir(dir)
char *dir;
{
DIR * dirp;
struct dirent *d;
/* open directory */
dirp = opendir(dir);
......... so on
这里声明的重要性是什么
char *dir;
在函数名称之后很快声明指针然后启动函数体的内涵是什么。
答案 0 :(得分:12)
这是一种较旧的C语法,卡住了“K&R C”,因为它是legendary book的原始版本中出现的。
以前写的是这样的:
foo(a, b)
int a;
int b;
{
}
现在是
int foo(int a, int b)
{
}
答案 1 :(得分:8)
这只是“旧式”,K&R C功能定义(请参阅Kernighan & Ritchie's book,通常简称 Kernighan& Ritchie 。)
您提到的代码可能是在八十年代末期或九十年代早期编写的,具有可移植性(即与较旧编译器的兼容性,可能在更多“异国情调”平台上)。
即使在1989 C标准发布之后,多年来K& RC仍然被认为是C程序员在需要最大可移植性时限制自己的“最低共同点”,因为许多较旧的编译器仍然在使用,并且因为精心编写的K& RC代码也可以是合法的标准C.
有些人可能相信 K& R风格的函数定义,仍然受编译器支持,更具可读性,实际上不一定是真的;比较:
some_function(param1,param2,param3)
char *param1; /* param1 comment */
int param2; /* param2 comment */
short param3; /* param3 comment */
{
}
与
/* notice also that return type is explicitly specified now */
int
some_function(
char *param1, /* param1 comment */
int param2, /* param2 comment */
short param3 /* param3 comment */
)
{
}
自1989年以来,K& R风格的功能定义已经过时了;看到
第6.9.5节C90标准中的“功能定义”。