简而言之,我在同一目录中有两个.c文件和一个shared.h头文件。
这是shared.h:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <string.h>
#include <fcntl.h>
#include <signal.h>
#include <errno.h>
// declaring the number to factor and the the variable
factor as shared gloval variables
extern int n;
extern int factor;
这是pfact.c:
#include "shared.h"
int n;
int factor = 0;
// start main
int main(int argc, char **argv) {
// fork
// if child, exec to child
return 0;
}
这是child.c:
#include "shared.h"
int main(){
int m=0, k;
int status, child_exit_status;
pid_t pid;
int fd[2]; //every child will create another pipe to write to in addition to the pipe it inherits from its parent to read from
printf("n is %d\n", n);
// goes more code
return 0
}
我做错了什么?全局变量n在pfact.c中声明一次,在头文件shared.h中“externed”,然后头文件包含在child.c中
提前致谢!
答案 0 :(得分:2)
child.c中的那两行无用,你可以删除它
extern int n;
extern int factor;
这可以帮助您理解原因:
How do I use extern to share variables between source files?
孩子不知道n所以你可以在child.c中将它添加到全局中,但这肯定不是你试图做的原因。
你不能编译两个主要的,你应该重新考虑你的程序。
答案 1 :(得分:0)
您需要将对象链接在一起......
gcc -g -Wall -c child.c
gcc -g -Wall -c pfact.c
gcc -g -Wall -o pgm child.o pfact.o
回复:extern
行没用:是的,pfact.c
中不需要它们;但是最好#include
带有声明的标题,所以编译器可以交叉检查所有内容是否匹配。