【问题标题】:How to use an shared variable between multiple interacting C files? [duplicate]如何在多个交互的 C 文件之间使用共享变量? [复制]
【发布时间】:2016-05-29 23:04:58
【问题描述】:

我试图在文件demo_f1.c 中声明一个变量x,并在两个文件demo_f2.cdemo_f3.c 中使用它,分别具有两个函数void f2()void f3()

我有一个使用变量x 和这两个函数的驱动程序,但是当我尝试编译驱动程序时它给了我一个错误。

demo_f1.c

int x=2;

demo_f2.c

#include"C:\TC\BIN\demo_f1.C"

void f2()

{

    extern int x;

    printf("In f2 x:%d\n",x);

}

demo_f3.c

#include"C:\TC\BIN\demo_f1.C"

void f3()

{

    extern int x;

    printf("In f3 x:%d\n",x);

}

Driver.c

#include"stdio.h"
#include"conio.h"
#include"C:\TC\BIN\demo_f1.C"
#include"C:\TC\BIN\demo_f2.C"
#include"C:\TC\BIN\demo_f3.C"
void main()

{

    clrscr();

    printf("In main program,x:%d\n",x);

    f2();

    f3();

    getch();

}

错误:

Compiling C\TC\BIN\Driver.C:
Error C\TC\BIN\DEMO_F1.C 1: Variable 'x' is initialized more than once
Error C\TC\BIN\DEMO_F1.C 1: Variable 'x' is initialized more than once

为什么会出现此错误?我该如何纠正?

【问题讨论】:

  • 你为什么要#includeing .c 文件?
  • immibis 我知道我通常应该#include 一个.h 文件,但#includeing 一个.c 文件也可以。没问题。

标签: c variables scope include extern


【解决方案1】:

要编译您的代码,您只需从f2()f3() 中删除extern int x;。如需更完整的答案,请阅读 grahamj42 建议的 How do I use extern to share variables between source files in C?

【讨论】:

    【解决方案2】:

    您在driver.c 中包含了3 次demo_f1.c,1 次直接包含,2 次通过demo_f2.c 和demo_f3.c 间接包含。结果,编译器找到了三倍的行“int x=2;”

    您可以将该机制与头文件中通常使用的#ifndef 一起使用。像这样制作 demo_f1.c:

    #ifndef DEMO_F1_C
    #define DEMO_F1_C
    int x=2;
    #endif
    

    或者,为了避免包含 .c 文件,您可以:

    demo_f1.h

    #ifndef DEMO_F1_H
    #define DEMO_F1_H
    extern int x;
    #endif
    

    demo_f1.c

    #include "demo_f1.h"
    int x = 2;
    

    其他文件将包括 demo_f1.h。

    【讨论】:

      猜你喜欢
      • 2010-11-05
      • 1970-01-01
      • 2022-08-14
      • 1970-01-01
      • 1970-01-01
      • 2011-02-08
      • 2010-11-28
      相关资源
      最近更新 更多