gpt4 book ai didi

c - 如果没有必要的 header ,我的代码如何正确编译?

转载 作者:IT王子 更新时间:2023-10-29 00:23:38 27 4
gpt4 key购买 nike

我使用函数 fork()、exec()...

但是这个程序如何在不包含一些额外的头文件(如 sys/types.h、sys/wait.h)的情况下进行编译。

我使用 ubuntu 10.04 和 gcc 版本 4.4.3

#include <stdio.h>
#include <stdlib.h>

int main()
{
pid_t pid;

printf("before fork\n");

pid = fork();

if(pid == 0)
{
/*child*/
if(execvp("./cpuid", NULL))
{
printf("error\n");
exit(0);
}
}
else
{
if(wait(NULL) != -1)
{
printf("ok\n");
}
}

return 0;
}

最佳答案

在经典的“ANSI”C 中,如果您调用一个函数而不声明它,编译器的行为就好像该函数被隐式声明为采用固定但未指定数量的参数并返回 int。所以你的代码就像这样声明了 fork()execvp():

int fork();
int execvp();

由于 execvp() 接受固定数量的参数并返回 int,因此此声明是兼容的。 fork() 也接受固定数量的参数,但返回 pid_t;然而,由于 pid_tint 在大多数 Linux 架构上是等效的类型,因此该声明也有效兼容。

这些函数的实际定义在默认链接的 C 标准库中,因此定义在链接时可用,因此代码有效。

正如 Keith Thompson 指出的那样,此语言功能已在 C 语言标准的 C99 修订版中删除,并且在 C99 或 C11 模式下调用的编译器必须至少在调用未显式声明的函数时发出警告。

关于c - 如果没有必要的 header ,我的代码如何正确编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2847949/

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