error: conflicting types for ‘wstat’ in gcc
error: conflicting types for ‘wstat’ in gcc
我从文档中复制了这个程序: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) {
据我了解,wstat
被定义了两次。这是否意味着文档不正确?以及如何解决?
是的,密码刚刚被破解。我不知道 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);
}
我从文档中复制了这个程序: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) {
据我了解,wstat
被定义了两次。这是否意味着文档不正确?以及如何解决?
是的,密码刚刚被破解。我不知道 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);
}