函数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);
......
}
谢谢您!
函数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);
......
}
是的,只要这个声明与函数的实际定义相匹配。
pid_t pid, wait(int *), setsid(void);
pid
的pid_t
,一个名为wait
的函数(接受int*
并返回pid_t
),以及一个名为setsid
的函数(不接受参数并返回pid_t
)。
pid
的声明也是一个定义。是的,这是合法的C语言,并且在某些罕见情况下可能会很有用,例如如果您有一个使用wait
和static
链接的函数的普通C(非POSIX导向)源文件,并突然意识到需要从该文件中的一个函数调用POSIX wait
。通过在调用它的函数中限定声明,您可以避免与文件范围内的static
定义wait
发生冲突。
请注意,pid_t
可以从其他未声明wait
(或任何函数)的头文件中获取,但在其他情况下,由于缺少类型,您可能无法使用此类技巧。
是的,有些人可能会称其为对语言的可怕的黑客/滥用。 :-)