【发布时间】:2013-04-26 11:10:46
【问题描述】:
此论坛上一位知名贡献者"R.." 两天前明确告诉我:
Initializers for objects of static storage duration must be constant expressions. The result of a function call is not a constant expression.
他在谈论全局变量。但我不确定在 main() 函数中声明的常量或与此相关的任何函数是什么。尽管直觉上我觉得即使在函数中声明的常量也是如此,以下来自以下链接的程序,其据称是 correct 答案,让我感到困惑。
http://www.indiabix.com/c-programming/const/discussion-546
#include<stdio.h>
int get();
int main()
{
const int x = get();
printf("%d", x);
return 0;
}
int get()
{
return 20;
}
那么任何人都可以解释在 C 中将返回值分配给常量是否有效?
【问题讨论】:
-
... 和 IIRC,我两天前告诉过你,C 中没有 global variables 这样的东西,你指的是在文件范围内声明的变量具有静态存储持续时间。有相当大的差异。在文件范围内声明的变量的可见性要低得多;它们仅在它们自己的翻译单元中可见,在它们的声明之后。全局变量在它们的翻译单元之外,在它们声明之前也是可见的。
-
@undefinedbehaviour 您在什么情况下发表了此评论?您是否
R..使用另一个ID?谁是IIRC?顺便说一句,C 中真的没有全局变量吗?所有函数外声明的变量不是全局变量吗? -
在“C 中的全局变量”的上下文中,由于我上面指出的原因不存在,我提到它们不存在。我不是 R.. IIRC 代表“如果我没记错的话”。如果您愿意,您可以在 C 标准中搜索“global”,它不会找到任何相关内容。正如我之前所说,在所有函数之外声明的变量在文件范围声明,具有静态存储持续时间,并且它们仅从声明点到声明点可见翻译单元的结尾。这与其他语言中对全局变量的定义不同。
-
@undefinedbehaviour 我已经把它作为一个硬性的 N 快速规则钻进我的脑海中,即函数外的变量在 C 中称为“全局变量”。你能给出一个严格的定义吗?我在什么中称这些变量那么C呢?
-
@undefinedbehaviour 甚至一些关于 C 的书籍和流行网站也使用该术语。