【问题标题】:Compile redeclaration error of global variable in C++, but not in C在 C++ 中编译全​​局变量的重新声明错误,但在 C 中没有
【发布时间】:2011-01-28 08:56:37
【问题描述】:

假设我有这三个文件:

啊.h

//a.h header
#include <stdio.h>
int int_variable;

void a_f()
{
   printf("int_variable: %d\n", int_variable)
   int_variable++;
}

b.h

//b.h header
#include <stdio.h>
int int_variable;

void b_f()
{
   printf("int_variable: %d\n", int_variable)
   int_variable++;
}

ma​​in.c

//main.c
#include "a.h"
#include "b.h"

int main()
{
   a_f();
   b_f();
   return 0;
}

为什么在 C++ 中编译会产生重定义错误,而在 C 中不会? 我是 C++ 开发人员,那么在 C++ 中对我来说是有意义的,但为什么在 C 中这不是错误?

当我执行 C 生成的代码时,输​​出是:

int 变量:0

int 变量:1

【问题讨论】:

标签: c++ c compilation global-variables compiler-errors


【解决方案1】:

头文件中的全局变量只能与“extern”修饰符一起使用。没有例外。在一个或多个头文件(最好只有一个)中前向声明您的变量,然后在一个编译单元中定义它。

【讨论】:

    【解决方案2】:

    在 C 中,这两个变量实际上组合成一个变量,因为两者都没有显式初始化。

    如果您将两个 h 文件都更改为:

    // a.h
    int int_variable = 0;
    

    和:

    // b.h
    int int_variable = 0;
    

    你会得到一个重新定义的错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-25
      • 1970-01-01
      相关资源
      最近更新 更多