此代码段在C中是否合法?

时间:2011-02-10 09:36:31

标签: c

函数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); 
    ......
}

谢谢!

2 个答案:

答案 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,但在其他情况下,由于缺少类型,您可能无法使用此类技巧

是的,有些人可能会称这是一种可怕的黑客/滥用语言。 : - )