函数wait()在另一个函数中声明。它合法吗?此代码段在C中是否合法?
void panic(const int reason, const char *strg)
{
int ErrNo;
struct machine_attributes mach;
int ret, docstat, cnt;
pid_t pid, wait(int *), setsid(void);
......
}
谢谢!
函数wait()在另一个函数中声明。它合法吗?此代码段在C中是否合法?
void panic(const int reason, const char *strg)
{
int ErrNo;
struct machine_attributes mach;
int ret, docstat, cnt;
pid_t pid, wait(int *), setsid(void);
......
}
谢谢!
是的,只要此声明符合函数的实际定义即可。
pid_t pid, wait(int *), setsid(void);
该声明了三个实体:pid_t
名为pid
,函数(取int*
并返回pid_t
)命名wait
和一个名为setsid
功能(不采取任何参数和返回pid_t
)。
pid
的声明也是一个定义。
是的,它是合法的C,在极少数情况下它可能很有用,例如,如果您有一个纯C(非POSIX定向)源文件,它使用wait
和static
链接作为自己的函数,并且突然意识到你需要从该文件中的函数调用POSIX wait
。通过在调用它的函数中对该声明进行作用域划分,可以避免与wait
的文件范围static
定义冲突。
请注意,pid_t
可能从其他未声明wait
(或任何函数)的头文件中获取,但在其他情况下,由于缺少类型,您可能无法使用此类技巧。
是的,有人可能会称这是一种可怕的黑客/滥用该语言。 :-)
C中的函数不能在其他函数中定义,尽管一些编译器扩展允许使用它。 – templatetypedef 2011-02-10 09:37:36
@templatetypedef:不,但它们可以在其他函数中声明。 – 2011-02-10 09:40:57