全局变量的默认存储类别是什么?

发布于 2024-09-10 15:07:40 字数 239 浏览 9 评论 0 原文

全局变量的默认存储类别是什么?

在网上搜索时我发现,一些网站说它是静态。但是,静态意味着内部链接,并且变量在文件范围之外不可用,即它不应对其他目标文件可用。但是,仍然可以使用 extern int i 等声明来访问其他文件。

而且,如果我明确提及全局变量static,那么它在文件范围之外不可用。

那么,全局变量的正确默认存储类别是什么?

What is default storage class of a global variable?

While searching on web I found, some sites say it is static. But, static means internal linkage and the variable can not be available outside the file scope i.e it should not be available to other object files. But, they still can be accessed to other files using declarations like extern int i.

And, if I explicitly mention static to global variable then it is not available outside the file scope.

Then, what is correct default storage class for the global variables?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

郁金香雨 2024-09-17 15:07:40

所谓的“全局”变量没有“默认存储类别”。当变量在命名空间范围内定义时,它始终具有静态存储持续时间。没有办法改变这一点,这就是为什么“默认”的想法在这里不适用。 (存储持续时间是它的正确名称。)

当您将关键字static应用于命名空间范围内定义的变量时,它不会影响其存储持续时间< /em> - 它已经是静态的并且仍然是静态的 - 但它会影响它链接。关键字static将此类变量的链接从外部(默认)更改为内部。 链接是一个单独的概念,实际上与存储持续时间无关。

There's no "default storage class" for what is commonly known as "global" variables. When a variable is defined in namespace scope it always has static storage duration. There's no way to change that, which is why the idea of something "default" is not applicable here. (And storage duration is what it is correctly called.)

When you apply the keyword static to a variable defined in namespace scope it does not affect its storage duration - it was static already and it remains static - but it affects it linkage. The keyword static changes the linkage of such variable from external (default) to internal. Linkage is a separate concept, virtually unrelated to storage duration.

半世晨晓 2024-09-17 15:07:40

默认存储持续时间是静态的,但默认链接是外部的。您并不是唯一一个觉得这有点令人困惑的人。 The C Book(始终是一个很好的参考)说:

“您可能会发现交互
在这些不同的元素之间
既复杂又令人困惑:那就是
因为他们就是!”

引用这句话的部分,声明、定义和可访问性,有一个有用的表(8.1)。最后一行描述了您感兴趣的情况。正如它所指出的,没有存储类说明符的数据对象具有外部链接和静态持续时间。

The default storage duration is static, but default linkage is external. You're not the only one to find it a bit confusing. The C Book (always a good reference) says:

"You'll probably find the interactions
between these various elements to be
both complex and confusing: that's
because they are!"

The section with that quote, Declarations, Definitions and Accessibility, has a helpful table (8.1). The last row describes the case you're interested in. As it notes, data objects with no storage class specifier have external linkage and static duration.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文