问题标签 [storage-class-specifier]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
6654 浏览

c++ - 外部存储类说明符

C++ 标准的第 7.1 节提到了“extern”作为存储类说明符。

N3126 - “extern 说明符只能应用于变量和函数的名称。extern 说明符不能用于类成员或函数参数的声明。有关使用 extern 说明符声明的名称的链接,请参见 3.5。[注意:extern 关键字也可以用在显式实例化和链接规范中,但在这种情况下它不是存储类说明符。——尾注]

我了解这个关键字,它在“链接规范”的上下文中使用,但我无法掌握使用“extern”作为存储说明符。

  1. 不是所有的“外部”名称都有静态存储持续时间吗?
  2. 如果对 1 的回答是肯定的,那么为什么会出现这种冗余?兼容性?
0 投票
1 回答
463 浏览

c++ - C++ 外部存储类生命周期

我是 C++ 新手,来自 Java 背景。我想确认以下几点:

我正在通过 Ira Pohl 的剖析阅读 C++,书中指出文件/extern变量/函数的生命周期是程序的持续时间(这是有道理的,因为变量没有在类中声明)

我想知道的;类中声明的变量也是如此吗?如果不是,如果在类中声明了一个变量,这是否会使该变量使用auto存储类?

谢谢。

0 投票
4 回答
5019 浏览

c - C中的外部声明和定义

据我所知,一个全局变量在 C 中可能是一到两个不同的存储类,并且声明可以用两个不同的关键字给出,相应地

静态变量只在声明模块内可见,不能导出。在外部声明的情况下,该变量位于所有链接模块的公共命名空间中,除非被静态变量遮蔽。

静态变量必须在其模块中定义,而外部变量可以在其他地方定义。如果曾经使用过,则必须对其进行定义。

我的编译器(GCC)接受

但抱怨

似乎期望外部变量永远不会用关键字“extern”定义。这导致了以下问题

上例中的 Object 'foo' 在定义它的模块中有什么样的存储类?

0 投票
2 回答
769 浏览

c++ - 'auto' 关键字可以用作 C++11 中的存储类说明符吗?

在 C++11 中,auto关键字可以用作存储类说明符吗?

以下代码在 C++11 中是否合法?

0 投票
1 回答
10018 浏览

c++ - 为“FileCase”错误指定的存储类

我试图编译一些代码但是得到了错误

这个错误是什么意思?

这是否与我在头文件的私有部分中将其声明为 extern int 的事实有关?

我无法解决问题。在 cpp 文件中,我已将其声明为

在需要它的函数内部,但它不能解决问题。有谁知道问题可能是什么?

谢谢

吉斯

0 投票
3 回答
974 浏览

c++ - 什么存储类是函数内部的静态,为什么?

如果我使用的是单例模式(是的,我知道 - 它们通常很糟糕)......并且我有一个像这样的实例函数:

什么是存储类instance

我正在阅读 David R. Butenhof 的“使用 POSIX 线程编程”,我遇到了这样的文字:

大多数时候,您可能会在文件范围内(即在任何函数之外)使用 extern 或静态存储类声明条件变量。如果它们被其他文件使用,它们应该具有普通(外部)存储类,如果它们仅在声明变量的文件中使用,它们应该具有静态存储类。

由于这个静态在函数内部,它是自动的吗?还是因为静态关键字而导致班级不同?

如果我将“实例”变量在其文件中移动为静态和全局(不在任何函数中) - 我仍然可以将它引用到另一个文件,还是不起作用?

0 投票
1 回答
318 浏览

d - 什么是纯变量?

我惊讶地发现这段代码可以编译:

pure仅在在线文档中的函数上下文中提及。

什么是变量,它们与pure变量有何不同?immutableconst

0 投票
1 回答
303 浏览

reference - 我应该如何在 D 中的函数参数中使用存储类说明符,如 ref、in、out 等?

D中函数参数的存储类说明符比较多,分别是:

  • 没有任何
  • in(相当于const scope
  • out
  • ref
  • scope
  • lazy
  • const
  • immutable
  • shared
  • inout

他们背后的理性是什么?他们的名字已经提出了明显的用途。但是,有一些悬而未决的问题:

  1. 我应该默认使用ref与类型函数参数结合in使用吗?struct
  2. 是否out隐含ref暗示?
  3. 我什么时候应该使用none
  4. 类和/或接口是否ref有意义?(类类型默认为引用。)
  5. ref在数组切片上怎么样?
  6. 我应该const尽可能使用内置算术类型吗?

更笼统地说:在内置类型、数组、结构、类和接口的情况下,何时以及为什么应该对函数参数类型使用哪个存储类说明符?(为了稍微隔离问题的范围,请不要讨论shared,因为它有自己的孤立含义。)

0 投票
4 回答
119 浏览

c++ - 在不包含在任何其他文件中的文件中使用外部变量是否有任何可能的用途?

我在网上遇到过很多例子,这些例子都extern int x在 main.c 中,main 函数就在其中。

extern我知道的唯一用途是在另一个文件中进行声明,并在定义它之后在另一个文件中使用它。

喜欢:啊:extern int x;

交流:int x = 5;

主.c: #include "a.h" // and start using x

第一种情况对我来说似乎是多余的。

那么,是否有可能extern在文件中使用不包含在任何其他文件中的变量?

0 投票
2 回答
710 浏览

c - 具有子作用域的函数的堆栈帧结构

以下是代码,我将其作为参考,以了解{}函数中存在的子作用域(或)虚拟作用域(just)如何影响堆栈帧的结构。

样本输出

基于上述行为,我推测如下。

  • 没有为范围创建堆栈帧{}
  • 通过这种方式auto,声明/定义的变量main和子范围内的变量{}共享相同的堆栈帧。
  • main因此,在函数内的任何地方(甚至在子范围内)都可以自由访问声明/定义的变量。
  • 另一方面,在子作用域中声明/定义的变量在块外失去了作用域。但只要堆栈帧存在,它的生命周期就有效。

问题:如果上述几点是正确的,那么为什么在给出同一个变量的多个定义时代码没有失败,一个是 within main,另一个是 within {}