【发布时间】:2012-08-25 08:17:33
【问题描述】:
好吧,阅读“有点老”的书(“The C 编程语言”,第二版,Dennis Ritchie 着),我遇到了以下问题:
外部变量必须在任何函数之外定义一次;这为其预留了存储空间。该变量也必须在每个想要访问它的函数中声明
我当时想 - 什么?!
“该变量也必须在每个想要访问它的函数中声明”。然后,我又震惊了一次:
int max;
/* ... */
int main()
{
extern int max;
/* ... */
}
还有一个 - 什么?!
据我所知(显然,这还远远不够),extern 仅在您在某处定义全局变量并且您想通过另一个文件访问它(而不是再次定义它)时才有意义。
所以:
-
extern int max在main或任何其他函数有什么意义? - 标准真的说这是一个必须吗(我需要在每个例子中声明这个max函数,那会用吗?)
- 这对于 C++ 是否相同(这就是我放置 C++ 标记的原因)?这是我第一次看到这样的东西。
注意:这和What is the use of declaring a static variable as extern inside a function?不一样
【问题讨论】:
-
Amazon.com 说 K&R 第 2 版。于 1988 年出版。我猜从那时起标准已经发生了一些变化。 :)
-
是的,我知道出版年份,这就是我的想法,但我想问一下,只是为了确定。这就是我要求 ISO 标准确认的原因。
-
@KirilKirov 您需要 C 或 C++ 标准的引用吗?
-
我认为这一切都在当年用 ANSI C /C89 解决了。
-
@Kiril Kirov 您必须阅读接下来的段落(以及整章),这应该可以消除您的困惑。例如“如果外部变量的定义在源文件中出现在特定函数中之前,则不需要在函数中声明外部变量。”这一章是教你一些关于链接和范围的知识,它通过简单的例子来做到这一点,不一定是最佳实践。
标签: c++ c global-variables extern kernighan-and-ritchie