gpt4 book ai didi

c - fork() 神秘地包含在内

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:44:00 27 4
gpt4 key购买 nike

这里是使用 fork() 的代码 (fork.c) 来展示它是如何工作的。

gcc --version 显示 gcc (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4

#include <stdio.h>
int num = 0;
int main(int argc, char*argv[]){
int pid;
pid = fork();
if(pid == 0){ /*child*/
num = 1;
}else if(pid > 0){ /*parent*/
num = 2;
}
printf("%d", num);
}

然后gcc fork.c -o fork 编译。它编译没有任何错误,可执行文件运行正确。但是我没有明确包含头文件unistd.h,我也检查了所有递归包含的头文件(gcc -H)

. /usr/include/stdio.h
.. /usr/include/features.h
... /usr/include/x86_64-linux-gnu/sys/cdefs.h
.... /usr/include/x86_64-linux-gnu/bits/wordsize.h
... /usr/include/x86_64-linux-gnu/gnu/stubs.h
.... /usr/include/x86_64-linux-gnu/gnu/stubs-64.h
.. /usr/lib/gcc/x86_64-linux-gnu/4.8/include/stddef.h
.. /usr/include/x86_64-linux-gnu/bits/types.h
... /usr/include/x86_64-linux-gnu/bits/wordsize.h
... /usr/include/x86_64-linux-gnu/bits/typesizes.h
.. /usr/include/libio.h
... /usr/include/_G_config.h
.... /usr/lib/gcc/x86_64-linux-gnu/4.8/include/stddef.h
.... /usr/include/wchar.h
... /usr/lib/gcc/x86_64-linux-gnu/4.8/include/stdarg.h
.. /usr/include/x86_64-linux-gnu/bits/stdio_lim.h
.. /usr/include/x86_64-linux-gnu/bits/sys_errlist.h

然后我在所有文件中执行了 grep 但我没有找到任何 fork() 声明。

如果 fork() 从未在任何头文件中声明,它如何编译而没有任何错误?还是我遗漏了什么?

最佳答案

在旧版本的 C(C99 之前的版本:C89 或 K&R C)中,调用函数不需要声明。然后您有责任提供正确的参数数量和类型,并且返回值被假定为 int 类型。编译器不为这种情况提供任何正确性检查。

然而,编译器应该给你一个警告。这是 GCC 6.3 提供的:

main.cpp: In function 'main':
main.cpp:5:11: warning: implicit declaration of function 'fork' [-Wimplicit-function-declaration]
pid = fork();
^~~~

关于c - fork() 神秘地包含在内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43312198/

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