c - C语言标准是否规定了对全局寄存器变量的支持

标签 c global-variables storage-class-specifier register-keyword

我读到 gcc 支持将全局变量定义为寄存器存储变量。我想知道的是,标准是否有针对此支持的任何规范。

最佳答案

有一种常见的误解,认为 C 的关键字 register 谈论的是硬件寄存器。这可能是该概念的起源,但在现代 C 中,这不是目的。 register 唯一真正的影响是 & 不允许出现在这样的野兽上。

它们可能以编译器想要的任何方式实现,硬件寄存器、立即指令或在堆栈上,您不会知道。您所知道的是,register 变量不能与其他变量互为别名。

为了更直接地回答您的问题,文件范围内的 register 不是 C 语言的一部分。如果可以,那将允许我们声明几乎任何基础的 register const 变量,可以用作某种 global constants。 .

将硬件寄存器映射到特定变量是编译器提供的扩展,例如 gcc。 Gcc 的功能,作为扩展,也适用于文件范围。但这是非常令人望而却步的,因为通常 CPU 没有很多可用的硬件寄存器。

关于c - C语言标准是否规定了对全局寄存器变量的支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31607507/

相关文章:

python - 全局变量声明

c - 跟踪 C 中与局部变量同名的全局变量

c - 在 C 中使用 fopen 进行迭代

c - 将指针移动 1 个结构 block

global-variables - 如何在任务中获取当前角色名称

kubernetes - 供应商kubernetes.io/cinder与openstack.org/standalone-cinder之间的区别

c - 头文件中没有 extern 的全局变量

c - 静态修饰符在 C 中如何工作?

c - 即使发生段错误,我如何使用 "gcov"?

c - 下面的C函数是如何工作的?