gpt4 book ai didi

c - stdlib.h 和 sys/wait 中等待的区别

转载 作者:太空狗 更新时间:2023-10-29 16:09:11 25 4
gpt4 key购买 nike

我很确定有这样的问题,但我找不到它:\无论如何,这是问题所在:

stdlib.hsys/wait.h o.O 中的 wait 有什么区别?


详细 - 我刚遇到这个问题,我无法编译一个简单的 C 程序。我隔离了问题,这是我得到的:

#include <stdlib.h>
//#include <sys/wait.h>

int main()
{
int status;
wait( &status );

return 0;
}

如果包含 stdlib.h,我得到:

$ gcc asd.cpp 
asd.cpp: In function ‘int main()’:
asd.cpp:9:16: error: conflicting declaration ‘wait& status’
asd.cpp:8:6: error: ‘status’ has a previous declaration as ‘int status’

什么声明? O.o 这里的 wait 是什么,它与 int status 冲突?

我在网上找到了一个帖子,用sys/wait.h替换stdlib.h解决了问题,但这是为什么呢?有什么区别?


编辑:感谢 sidyll 的评论,我更改了文件扩展名 - 从 .cpp.c 它成功了!我很震惊 :) 这怎么这么不同?仍然是同样的问题 - 这两个 wait-s 之间有什么不同?

最佳答案

区别在于 wait()<sys/wait.h>是您应该使用的那个。

来自wait(3)手册页:

SYNOPSIS
#include <sys/types.h>
#include <sys/wait.h>

pid_t wait(int *status);

wait函数未由 ISO C 标准定义,因此不允许符合标准的 C 实现在 <stdlib.h> 中声明它(因为程序出于自身目的使用名称 wait 是合法的)。带有 glibc 的 gcc 显然是在其默认的不符合模式下这样做的,但是如果您使用 gcc -ansi -pedantic 调用它或 gcc -std=c99 -pedantic , 它不识别函数名称 wait或类型 pid_t .

关于c - stdlib.h 和 sys/wait 中等待的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7324581/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com