gpt4 book ai didi

c++ - 在C++中编译全局变量的重声明错误,但在C中没有

转载 作者:可可西里 更新时间:2023-11-01 16:37:55 26 4
gpt4 key购买 nike

假设我有这三个文件:

啊.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 variable: 0

int variable: 1

最佳答案

在 C 语言中,这两个变量实际上合并为一个变量,因为它们都没有被显式初始化。

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

// a.h
int int_variable = 0;

和:

// b.h
int int_variable = 0;

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

关于c++ - 在C++中编译全局变量的重声明错误,但在C中没有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2458939/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com