获取未定义的参考到正确定义的全局变量

时间:2014-03-14 00:24:46

标签: c

简而言之,我在同一目录中有两个.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中

提前致谢!

2 个答案:

答案 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带有声明的标题,所以编译器可以交叉检查所有内容是否匹配。