在C函数中声明extern变量?

时间:2013-08-20 05:49:42

标签: c declaration extern variable-declaration

我在C文件中定义了一个变量:int x,我知道如果我想在其他文件中使用它,我应该使用extern int x在其他文件中声明它。

我的问题是:我应该在其他文件中将其声明在哪里?

  1. 在所有功能之外,

    // in file a.c:
    int x;
    
    // in file b.c:
    extern int x;
    void foo() { printf("%d\n", x); }
    
  2. 将使用它的功能?

    // in file b.c:
    void foo() {
       extern int x;
       printf("%d\n", x);
    }
    
  3. 我的怀疑是:

    • 哪一个是正确的?或者
    • 如果两者都正确,哪个是首选?

3 个答案:

答案 0 :(得分:14)

  1. 两者都是正确的。

  2. 首选哪一个取决于变量的使用范围。

    • 如果你只在一个函数中使用它,那么在函数中声明它。

      void foo() 
      {
           extern int x;   <--only used in this function.
           printf("%d",x);   
      }
      
    • 如果它被文件中的多个函数使用,请将其声明为全局值。

      extern int x;   <-- used in more than one function in this file
      void foo()
      {
          printf("in func1 :%d",x);   
      }    
      void foo1() 
      {
          printf("in func2 :%d",x);   
      }  
      

答案 1 :(得分:5)

假设你在函数中声明:

// in file b.c:
void foo() {
    extern int x;
    printf("%d\n", x);
}
void foo_2() {
    printf("%d\n", x);  <-- "can't use x here"
}

然后x仅在函数foo()内部可见,如果我有任何其他函数说foo_2(),我无法访问x内的foo_2()

如果你在所有函数之前声明x,那么它将在完整文件(所有函数)中全局可见/可访问。

  // in file b.c:
  extern int x;
  void foo() { printf("%d\n", x); }
  void foo_2() { printf("%d\n", x); }  <--"visible here too"

因此,如果您只需要单个函数中的x,那么您可以在该函数内部声明,但如果x在多个函数中使用,则在所有函数之外声明x(您的第一个建议) 。

答案 2 :(得分:5)

你可以使用另一种方法来使用说明符extern声明变量。

// in file a.c:
int x;

// in file b.h  //   make a header file and put it in 
                //   the same directory of your project and every
                //   time you want to declare this variable 
                //   you can just INCLUDE this header file as shown in b.c
extern int x;

// in file b.c:
#include "b.h"
void foo() { printf("%d\n", x); }