gpt4 book ai didi

c - 下标具有寄存器存储类的数组

转载 作者:太空宇宙 更新时间:2023-11-03 23:39:10 24 4
gpt4 key购买 nike

在 GNU c99 手册中:

3.13 Array Subscripts

You can access array elements by specifying the name of the array, and the array subscript (or index, or element number) enclosed in brackets. Here is an example, supposing an integer array called my_array:

my_array[0] = 5;

The array subscript expression A[i] is defined as being identical to the expression (*((A)+(i))). This means that many uses of an array name are equivalent to a pointer expression. It also means that you cannot subscript an array having the register storage class.

我已经尝试了下面的东西,它对我来说工作正常。

#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;
}

有人可以用粗体字解释一下语句的意思吗?或者我尝试错误地验证它。

最佳答案

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
^~~~~~
$

没有任何额外选项。事实上,即使是 GCC 4.8.1 也没有选项。 (GCC 8.1 默认为 C11;GCC 4.8.1 默认为 C90;指定 -std=c99-std=gnu99 没有区别。)

因此,如果您使用 GCC,则必须使用比 4.8.1 更旧的 GCC 版本。或者您正在使用其他一些不像 GCC 那样符合标准的编译器。

关于c - 下标具有寄存器存储类的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50244345/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com