函数wait()在另一个函数中声明。这是合法的吗?
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);
......
}
谢谢!
答案 0 :(得分:6)
是的,只要此声明符合函数的实际定义。
pid_t pid, wait(int *), setsid(void);
这声明了三个实体:一个名为pid_t
的{{1}},一个名为pid
的函数(取int*
并返回pid_t
)和一个函数(不参数并返回名为wait
的{{1}}。
pid_t
的声明也是一个定义。
答案 1 :(得分:0)
是的,它是合法的C,并且在极少数情况下它可能很有用,例如,如果您有一个使用wait
static
链接的普通C(非POSIX导向)源文件它自己的一个函数,突然意识到你需要从该文件中的函数调用POSIX wait
。通过在调用它的函数中确定声明范围,可以避免与static
的文件范围wait
定义冲突。
请注意,可以从未声明pid_t
(或任何函数)的其他标头中获取wait
,但在其他情况下,由于缺少类型,您可能无法使用此类技巧
是的,有些人可能会称这是一种可怕的黑客/滥用语言。 : - )