gpt4 book ai didi

c - visual studio 中不允许重复的外部静态声明?

转载 作者:行者123 更新时间:2023-12-04 08:23:41 26 4
gpt4 key购买 nike

我正在研究声明和定义的概念(链接、范围、持续时间)。

但是我发现了一个无法解释的错误:

以下代码在 gcc 和 visual studio 2010 中都没有问题

#include <stdio.h>

extern int a = 7;
extern int a;

int main()
{
printf("%d\n", a);
}

但是下面的代码在 visual studio 中会产生错误,但在 gcc 中却没问题:

#include <stdio.h>

static int a = 7;
static int a;

int main()
{
printf("%d\n", a);
}

error C2370: 'a' : redefinition; different storage class

这只是 visual studio 编译器中的一个错误吗?

编辑:这个问题原来是 this 的重复问题.

最佳答案

static int a; 本身没有初始化器是一个“暂定定义”,所以应该没问题。看起来 Microsoft 有某种扩展可以吸引您。

编辑 - 它看起来确实像 Microsoft 的问题。看看这个 related question . C 规范本身很清楚您的代码很好。来自6.9.2 外部对象定义:

A declaration of an identifier for an object that has file scope without an initializer, and without a storage-class specifier or with the storage-class specifier static, constitutes a tentative definition. If a translation unit contains one or more tentative definitions for an identifier, and the translation unit contains no external definition for that identifier, then the behavior is exactly as if the translation unit contains a file scope declaration of that identifier, with the composite type as of the end of the translation unit, with an initializer equal to 0.

关于c - visual studio 中不允许重复的外部静态声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8146541/

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