如何在多个模块中使用全局数组

时间:2014-10-23 00:49:18

标签: c arrays header-files extern

我试图访问主文件中的程序数组。它在头文件中声明,并在名为fileReader的单独模块中初始化。我收到的错误信息是

架构x86_64的未定义符号:   " _programs",引自:       _main in test-0bf1e8.o ld:找不到架构x86_64的符号 clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)

的main.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "header.h"
#include "fileReader.c"

int main() {

    readPrograms();
    for (int i=0; i<4; i++) {
        printf("%s", programs[i]);
    } 

    return 0;
}

fileReader.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "header.h"

int readPrograms() {
    int i=0;
    int numProgs=0;
    char* programs[50];
    char line[50];

    FILE *file;
    file = fopen("files.txt", "r");

    while(fgets(line, sizeof(line), file)!=NULL) {
        //add each filename into array of programs
        programs[i]=strdup(line); 
        i++;
    }

    fclose(file);

    return 0;
}

header.h

extern char* programs[];

提前致谢

1 个答案:

答案 0 :(得分:0)

您不应该包含来自其他C文件的C文件,只包含头文件。

以下是您需要解决的问题:

  • readPrograms函数的原型添加到header.h
  • 从main.c文件中删除#include "fileReader.c"
  • programs数组的定义添加到您的一个C文件中(例如,main.c)。
  • programs
  • 删除本地readPrograms的声明

您在main.c中放置的programs的定义应如下所示:

char* programs[50];

您可以在main()功能之前或之后添加。