2011-02-10 35 views
4

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

谢谢!

+1

C中的函数不能在其他函数中定义,尽管一些编译器扩展允许使用它。 – templatetypedef 2011-02-10 09:37:36

+3

@templatetypedef:不,但它们可以在其他函数中声明。 – 2011-02-10 09:40:57

回答

6

是的,只要此声明符合函数的实际定义即可。

pid_t pid, wait(int *), setsid(void); 

该声明了三个实体:pid_t名为pid,函数(取int*并返回pid_t)命名wait和一个名为setsid功能(不采取任何参数和返回pid_t)。

pid的声明也是一个定义。

0

是的,它是合法的C,在极少数情况下它可能很有用,例如,如果您有一个纯C(非POSIX定向)源文件,它使用waitstatic链接作为自己的函数,并且突然意识到你需要从该文件中的函数调用POSIX wait。通过在调用它的函数中对该声明进行作用域划分,可以避免与wait的文件范围static定义冲突。

请注意,pid_t可能从其他未声明wait(或任何函数)的头文件中获取,但在其他情况下,由于缺少类型,您可能无法使用此类技巧。

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