C 为具有寄存器存储类的数组下标
在GNU c99手册中: 3.13数组下标 您可以通过指定数组的名称来访问数组元素,然后 中包含的数组下标(或索引,或元素号) 括号。下面是一个示例,假设一个名为 我的_数组:C 为具有寄存器存储类的数组下标,c,arrays,gnu,c99,C,Arrays,Gnu,C99,在GNU c99手册中: 3.13数组下标 您可以通过指定数组的名称来访问数组元素,然后 中包含的数组下标(或索引,或元素号) 括号。下面是一个示例,假设一个名为 我的_数组: my_array[0] = 5; 数组下标表达式A[i]定义为 与表达式(*(A)+(i))相同。这意味着许多 数组名的使用等同于指针表达式它也是 表示不能为具有寄存器存储的数组下标 类 我试过下面的东西,对我来说效果很好 #include <stdio.h> int main() { r
my_array[0] = 5;
数组下标表达式A[i]定义为
与表达式(*(A)+(i))相同。这意味着许多
数组名的使用等同于指针表达式它也是
表示不能为具有寄存器存储的数组下标
类
我试过下面的东西,对我来说效果很好
#include <stdio.h>
int main()
{
register int arr[10] = {1, [9] = 6};
printf("arr[9] %d\n", *((arr) + 9)); // working fine
printf("arr[9] %d\n", arr[9]); //working fine
return 0;
}
#包括
int main()
{
寄存器int-arr[10]={1,[9]=6};
printf(“arr[9]%d\n”,*((arr)+9));//工作正常
printf(“arr[9]%d\n”,arr[9]);//工作正常
返回0;
}
有人能用粗体字解释一下这句话的意思吗?或者我尝试错误地验证它。GCC 8.1产生:
$ gcc rega89.c
rega89.c: In function ‘main’:
rega89.c:7:9: error: address of register variable ‘arr’ requested
printf("arr[9] %d\n", *((arr) + 9)); // working fine
^~~~~~
$
没有任何额外的选择。事实上,即使是GCC4.8.1也抱怨没有选择。(GCC 8.1默认为C11;GCC 4.8.1默认为C90;指定-std=c99
或-std=gnu99
没有区别。)
因此,如果您使用的是GCC,那么您必须使用比4.8.1更旧的GCC版本。或者您使用的其他编译器不像GCC那样符合标准。假设:此语句已过时,编译器现在基本上忽略了
寄存器
,即使C标准可能不需要它,它也会生成工作代码。是的!!!我在mac上工作,它没有抛出任何错误。然而,当它在另一个系统上尝试时,它也报告了同样的情况。gcc——版本gcc(gcc)4.8.5有趣——我也在Mac上测试,但使用的是“真正的”gcc,而不是伪装成gcc的叮当声。