如何将寄存器存储 class 与 typedef 一起使用?
How to use register storage class with typedef?
我想这样做:
typedef register unsigned int _newint;
基本上,register unsigned int
的简明别名是 _newint
。
但是出现错误,“可能未指定多个存储 class”,下划线 register
。
我想知道我能不能做到;如果是那么怎么办?
看起来很奇怪,typedef
关键字实际上是一个存储 class 说明符(而且,正如错误消息所示,你不能有第二个,register
同一语句中的说明符)。来自 this C11 Draft Standard:
6.7.1 Storage-class specifiers
…
5 The typedef
specifier is called a ‘‘storage-class
specifier’’ for syntactic convenience only; it is discussed in 6.7.8.
The meanings of the various linkages and storage durations were
discussed in 6.2.2 and 6.2.4.
如果尽管 above-quoted 段中的措辞如此,您还是觉得不方便,然后考虑为什么将存储 class 说明符添加到 typedef
。如果在声明 实际变量 时添加 register
说明符(或任何其他限定符),很可能会使代码更清晰:
typedef unsigned int _newint;
void foo(void)
{
register _newint MyNewInt;
//...
}
'Hiding' 别名中的 register
说明符可能会给您代码的未来读者带来问题,他们将无法理解为什么要添加 不同的 该类型变量的说明符会导致问题。
I want to know if I can do this or not, if yes then how?
typedef
和 register
都算作存储 classes,尽管这在 typedef
的情况下有点技术性。你不能声明任何标识符有一个以上的存储 class,所以直接的答案是否定的,你不能那样做。
你可以想象使用宏而不是 typedef
来达到类似的效果:
#define _newint register unsigned int
void foo() {
_newint x;
}
然而,这是误导,所以你不应该。
更一般地说,您可能根本不应该使用 register
存储 class。现代编译器不需要您的帮助来确定将哪些变量存储在寄存器中,并且 register
只是一个提示,因此唯一值得注意的效果是(根据规则)阻止您获取对象的地址使用该存储声明 class.
我想这样做:
typedef register unsigned int _newint;
基本上,register unsigned int
的简明别名是 _newint
。
但是出现错误,“可能未指定多个存储 class”,下划线 register
。
我想知道我能不能做到;如果是那么怎么办?
看起来很奇怪,typedef
关键字实际上是一个存储 class 说明符(而且,正如错误消息所示,你不能有第二个,register
同一语句中的说明符)。来自 this C11 Draft Standard:
6.7.1 Storage-class specifiers
…
5 Thetypedef
specifier is called a ‘‘storage-class specifier’’ for syntactic convenience only; it is discussed in 6.7.8. The meanings of the various linkages and storage durations were discussed in 6.2.2 and 6.2.4.
如果尽管 above-quoted 段中的措辞如此,您还是觉得不方便,然后考虑为什么将存储 class 说明符添加到 typedef
。如果在声明 实际变量 时添加 register
说明符(或任何其他限定符),很可能会使代码更清晰:
typedef unsigned int _newint;
void foo(void)
{
register _newint MyNewInt;
//...
}
'Hiding' 别名中的 register
说明符可能会给您代码的未来读者带来问题,他们将无法理解为什么要添加 不同的 该类型变量的说明符会导致问题。
I want to know if I can do this or not, if yes then how?
typedef
和 register
都算作存储 classes,尽管这在 typedef
的情况下有点技术性。你不能声明任何标识符有一个以上的存储 class,所以直接的答案是否定的,你不能那样做。
你可以想象使用宏而不是 typedef
来达到类似的效果:
#define _newint register unsigned int
void foo() {
_newint x;
}
然而,这是误导,所以你不应该。
更一般地说,您可能根本不应该使用 register
存储 class。现代编译器不需要您的帮助来确定将哪些变量存储在寄存器中,并且 register
只是一个提示,因此唯一值得注意的效果是(根据规则)阻止您获取对象的地址使用该存储声明 class.