我想这样做:

typedef register unsigned int _newint;

基本上,一个简洁的别名register unsigned int作为_newint.

但是出现了一个错误,"可能无法指定多个存储类",在register下面.

我想知道我是否能做到这一点;如果是,那怎么办?

推荐答案

我想知道我是否能做到这一点,如果是,那么如何做到?

typedefregister都算作存储类,不过对于typedef来说,这有点技术性.您不能将任何标识符声明为具有多个存储类,因此直接回答是"否",您不能这样做.

可以想象,使用宏而不是typedef来实现类似的效果:

#define _newint register unsigned int

void foo() {
    _newint x;
}

然而,这是误导,所以你不应该.

更一般地说,您可能根本不应该使用register存储类.现代编译器不需要您的帮助来确定要在寄存器中存储哪些变量,而register只是一个提示,因此唯一值得注意的效果是(根据规则)阻止您获取用该存储类声明的对象的地址.

C++相关问答推荐

与unions 的未定义行为

什么C代码将确定打开的套接字正在使用的网络适配器?

显式地将值转换为它从函数返回的类型的含义是什么?

C是否用0填充多维数组的其余部分?

非正规化边缘毛刺

如何在C中打印包含扫描字符和整数的语句?

如何使用指向 struct 数组的指针并访问数组中特定索引处的 struct

为什么我会收到释放后堆使用错误?

在创建动态泛型数组时,通过realloc对故障进行分段

For循环中的变量行为不符合预期.[C17]

如何在GDB中查看MUSL的源代码

具有正确标头的C struct 定义问题

Realloc():中止的下一个大小无效(核心转储)

在C中交换字符串和数组的通用交换函数

模仿 memmove 的行为

为什么 int32_t 和 int16_t 在 printf 输出中具有相同的位数?

尽管将其标记为易失性,但 gcc 是否优化了我的等待代码?

free后内存泄漏?

当 a 是代码块时使用逗号运算符 (a, b)

如何在Linux上从控制台左上角开始打印文本?