gpt4 book ai didi

c - 如何在 block 作用域中声明具有内部链接的标识符,而无需事先声明该标识符且某些链接可见?

转载 作者:行者123 更新时间:2023-11-30 15:12:35 25 4
gpt4 key购买 nike

考虑一下:

#include <stdio.h>

static int b;

int main()
{
{
int b;

{
extern int b;

b = 2;
}
}

printf("%d", b);
}

根据定义,分配值 2 的标识符“b”必须是具有外部链接的标识符。然而,由于某种原因,“clang”C 编译器不会提示,并且此代码的​​输出是“2”。

我之所以这样假设是因为 C 标准中的 $6.2.2.4 点:

For an identifier declared with the storage-class specifier extern in a scope in which a prior declaration of that identifier is visible,31) if the prior declaration specifies internal or external linkage, the linkage of the identifier at the later declaration is the same as the linkage specified at the prior declaration. If no prior declaration is visible, or if the prior declaration specifies no linkage, then the identifier has external linkage.

正如前面的可见声明指定没有链接('int b')。

无论如何,我如何在赋值之前进行声明以引用具有内部链接的标识符(而不是具有外部链接的标识符)。

编辑:我看到这个例子是 UB 但这并没有改变我的问题。

最佳答案

您的程序有 undefined behaviour 。您不能在同一范围内使用具有内部和外部链接的标识符。

C11, §6.2.3, 4

If, within a translation unit, the same identfier appears with both internal and external linkage, the behavior is undefined.

关于c - 如何在 block 作用域中声明具有内部链接的标识符,而无需事先声明该标识符且某些链接可见?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34971152/

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