标签: register-keyword

如何使用 C 中的寄存器存储类创建数组?

我们知道用寄存器存储类声明的变量的地址是不能取的。所以我尝试用 register 关键字创建一个数组并尝试访问元素。但我注意到编译器没有引发任何错误。

#include <stdio.h>
void main()
{
   register int x[]={3,4};
   printf("%d\n",x[0]); // compiled successfully
  // printf("%d",&x[0]);// compiler raises an error
}
Run Code Online (Sandbox Code Playgroud)

众所周知,编译器将表达式 x[0] 转换为 *(x+0),其中 x 表示基地址。但是怎么可能得到数组的基地址,因为它是用寄存器存储类声明的?

提前致谢..

c arrays gcc register-keyword

6
推荐指数
1
解决办法
78
查看次数

如何确保用"寄存器"说明符定义的变量是否存储在CPU寄存器中?

我想知道,我们如何确定用register说明符定义的变量是否存储在CPU寄存器中?

c cpu-registers register-keyword

5
推荐指数
1
解决办法
937
查看次数

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

我读到gcc提供了将全局变量定义为寄存器存储变量的支持.我想知道的是标准是否有这种支持的任何规范.

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

3
推荐指数
1
解决办法
329
查看次数

作为函数参数的"指向寄存器变量的指针"有什么作用?

据我所知,register说明符提示编译器将变量存储在寄存器中.这一切都很好,直到我XKBlib.h从Xorg-7.7中看到以下声明:

extern  int     XkbTranslateKeySym(
    Display *           /* dpy */,
    register KeySym *       /* sym_return */,
    unsigned int        /* modifiers */,
    char *          /* buffer */,
    int             /* nbytes */,
    int *           /* extra_rtrn */
);
Run Code Online (Sandbox Code Playgroud)

注意如何sym_return作为指向寄存器变量指针传递.是什么让我想知道的是

  1. 这似乎是允许的,尽管无法获取寄存器变量的地址,
  2. 这在某种程度上似乎很重要,可以在函数声明中提到.

点1似乎在某种程度上是无效的,因为我似乎能够将指针传递给非register变量,即使-pedantic-errors是GCC的标志.

那么,与带有省略register关键字的声明相比,这个声明有什么变化呢?它会改变召唤惯例还是什么?

c function calling-convention function-declaration register-keyword

2
推荐指数
1
解决办法
191
查看次数