1

我正在阅读维基百科上的Typedef。该页面上提到的示例是

typedef int km_per_hour ;
typedef int points ;

km_per_hour current_speed ;
points high_score ;
...

void congratulate(points your_score) {
if (your_score > high_score)
...

更进一步,它说这我无法理解为什么?

void foo() {
unsigned int a;         // Okay
unsigned km_per_hour b; // Compiler complains
long int c;             // Okay
long km_per_hour d;     // Compiler complains
...

为什么编译器会抱怨 unsigned 和 long?

4

4 回答 4

3

您不能在'd 类型之前signedunsigned之前添加。并且 只能修改基本整数类型并直接执行此操作。typedefsignedunsigned

编译器解析或signed单独unsigned或接近char,short和. 在所有其他情况下,它们被视为无效/意外/放错位置。intlong

从这个意义上说,signed不要unsigned用作constvolatile修饰符。

于 2012-09-22T06:36:59.830 回答
1

typedefs不能修改或使用之类的macros。你有km_per_houras int,所以它只能这样使用!

您应该更改的定义typedefs或定义新的定义以摆脱编译器问题。

于 2012-09-22T06:39:09.753 回答
0

您不能使用额外的说明符修改 typedef。你应该只写 km_per_hour b; 和 km_per_hour d;我希望这有帮助。

于 2012-09-22T06:36:11.227 回答
0

因为你已经定义了一个类型——即把剑插在地上,做你的案子。

然后你就不能四处走动,改变你的情况。这在法庭和编译器中都行不通。

对不起这个比喻。

于 2012-09-22T06:37:33.540 回答