【发布时间】:2016-01-09 14:57:01
【问题描述】:
(ANSI-C 89)
您好,是否可以同时声明 static 和 register 变量?每当我尝试这样做时,我都会得到一个错误消息:multiple storage classes in declaration specifiers
这是代码:
#include <stdio.h>
void f1(static int i);
int main()
{
static register int i;
i = 5;
f1(i);
}
void f1(static int i)
{
static int y =6;
y+=1;
printf("\n Y=%d \n",y);
}
还有
【问题讨论】:
-
你为什么要这样做?
-
你无法做到这一点,因为
static变量存储在 .bss 区域中,而register存储在高速 CPU 寄存器中。 -
@stackptr:我不认为这符合 C 标准。
-
@KerrekSB 是什么意思?仅仅因为 C 标准没有说明静态变量的存储位置,并不意味着大多数编译器不会在 .bss 区域中分配静态变量。
-
@stackptr:当然,但这与这个问题完全无关。 “大多数编译器所做的”并不是为什么不允许 OP 做她想做的事情的理由。
标签: c gcc static c89 register-allocation