【问题标题】:How do I share a global variable between c files?如何在 c 文件之间共享全局变量?
【发布时间】:2011-07-22 16:17:30
【问题描述】:

如果我在.c 文件中定义了一个全局变量,如何在另一个.c 文件中使用相同的变量?

file1.c:

#include<stdio.h>

int i=10;

int main()
{
    printf("%d",i);
    return 0;
}

file2.c:

#include<stdio.h>

int main()
{
    //some data regarding i
    printf("%d",i);
    return 0;
}

第二个文件file2.c如何使用第一个文件file1.ci的值?

【问题讨论】:

标签: c extern


【解决方案1】:

文件 1:

int x = 50;

文件 2:

extern int x;

printf("%d", x);

【讨论】:

  • 不,我什么都没忘记。我只是在解释你会在这些文件中放入什么。
  • 另外,文件 1 不应该是头文件,而应该是 .c 文件。文件 2 可以是包含“extern int x”部分的头文件。
  • @fresh_graduate:将extern int x; 行放在头文件中,并从file2.c 中包含该文件,与将行放在file2 中的效果完全相同相同。 C。如何组织代码取决于您,您所需要的只是在预处理器完成包含和其他所有操作后,文件 2 中包含该行。
  • @steve..i 可以接受您的评论作为答案。知道 extern,我可以在互联网上的任何地方轻松找到它,但无法理解文件的包含方式。你上面的评论清除了一切谢谢。因为我不能接受评论作为你评论的答案+1。没有人清楚地触及你在这里提到的点
  • 我可以对数组做同样的事情吗?
【解决方案2】:

使用extern 关键字在另一个.c 文件中声明变量。例如:

extern int counter;

表示实际存储位于另一个文件中。它可以用于变量和函数原型。

【讨论】:

  • 只是为了我的教育,我能看到一个使用extern的函数原型声明的例子吗?是不是就像在原型前面加上extern 一样简单? (例如,extern void doSomething(int, char *);
  • @Platinum Azure:在 C 中,函数声明默认为 extern。但是明确添加 extern 并没有什么坏处,就像在您的示例中一样。
【解决方案3】:

在头文件或其他 C 文件中使用 extern &lt;variable type&gt; &lt;variable name&gt;

【讨论】:

  • 但是我应该如何包含文件?不需要吗?
  • @fresh_graduate:你不需要包含文件,链接器会帮你解决的。
【解决方案4】:

在第二个.c 文件中使用具有相同变量名的extern 关键字。

【讨论】:

    【解决方案5】:

    和你在 file1.c 中做的一样 在file2.c中:

    #include <stdio.h> 
    
    extern int i;  /*This declare that i is an int variable which is defined in some other file*/
    
    int main(void)
    {
    /* your code*/
    

    如果你使用 int i;在 main() 下的 file2.c 中,我将被视为与 file1.c 中定义的本地自动变量不同

    【讨论】:

      【解决方案6】:

      在另一个 .c 文件中使用 extern 关键字。

      【讨论】:

        【解决方案7】:

        如果你想在file2.c中使用file1.c的全局变量i,那么需要记住以下几点:

        1. file2.c 中不应有 main 函数
        2. 现在全局变量 i 可以通过两种方式与 file2.c 共享:
          a) 通过在 file2.c 中使用 extern 关键字声明,即 extern int i;
          b) 通过在头文件中定义变量 i 并将该头文件包含在 file2.c 中。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-03-28
          • 1970-01-01
          • 2019-08-17
          • 1970-01-01
          • 2021-03-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多