19

我在 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);
    }
    

我的疑问是:

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

3 回答 3

19
  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);   
      }  
      
于 2013-08-20T06:00:13.670 回答
6

假设如果您在函数内声明:

// 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"
}

then仅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在所有函数外部声明(您的第一个建议)。

于 2013-08-20T05:53:00.657 回答
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); }
于 2013-08-20T11:34:47.457 回答