【发布时间】:2017-04-09 21:37:01
【问题描述】:
这是使用 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 允许隐式函数定义,它只获得
int fork()原型:int返回值和任意数量的参数。不过,编译器应该发出警告 -
使用
gcc -std=c11 -Wall -Wextra -Werror继续。在我对编译感到满意之前,我有更多选择。