错误:gcc中“ wstat”的类型冲突

时间:2019-06-17 09:24:45

标签: c gcc compiler-errors sigchld

我从以下文档中复制了该程序:https://docs.oracle.com/cd/E19455-01/806-4750/signals-7/index.html

/

运行#include <stdio.h> #include <signal.h> #include <sys/wait.h> #include <sys/resource.h> void proc_exit() { int wstat; union wait wstat; pid_t pid; while (TRUE) { pid = wait3 (&wstat, WNOHANG, (struct rusage *)NULL ); if (pid == 0) return; else if (pid == -1) return; else printf ("Return code: %d\n", wstat.w_retcode); } } main () { signal (SIGCHLD, proc_exit); switch (fork()) { case -1: perror ("main: fork"); exit (0); case 0: printf ("I'm alive (temporarily)\n"); exit (rand()); default: pause(); } } 时出现此错误:

gcc main.c

据我了解,main.c: In function ‘proc_exit’: main.c:9:13: error: conflicting types for ‘wstat’ union wait wstat; ^~~~~ main.c:8:6: note: previous declaration of ‘wstat’ was here int wstat; ^~~~~ main.c:9:13: error: storage size of ‘wstat’ isn’t known union wait wstat; ^~~~~ main.c:12:9: error: ‘TRUE’ undeclared (first use in this function) while (TRUE) { 被定义了两次。这是否意味着文档不正确?以及如何解决?

1 个答案:

答案 0 :(得分:5)

是的,该代码已损坏。我不知道union wait wstat;的意图是什么。也许是文档作者的一些复制粘贴错误。谁知道。 IMO的代码通常写得很差。

无论如何,这是代码实际要执行的操作:

int wstat;
pid_t pid;

while (1) {
    pid = wait3(&wstat, WNOHANG, NULL);
    if (pid == 0 || pid == -1)
        return;
    printf("Return code: %d\n", wstat);
}