5

我对以下代码感到惊讶,

#include<stdio.h>
typedef int type;

int main( )
{
    type type = 10;
    printf( "%d", type );
}

这经历了,程序的输出是 10。

但是当我如下稍微更改代码时,

#include<stdio.h>
typedef int type;

int main()
{
    type type = 10;
    float f = 10.9898;
    int x;
    x = (type) f;
    printf( "%d, %d", type, x);
}

在 aCC 编译器中:

"'type' 被用作类型,但尚未被定义为类型。"

在 g++ 编译器中:

“错误:预期的';' f"之前

是不是编译器在第二种情况下没有识别出模式,因为这种模式可能与变量的赋值、表达式的评估等有关,而在第一种情况下,这种模式仅在定义变量时使用,编译器识别它.

4

1 回答 1

11

typedef标识符,如变量名,也有一个范围。后

type type = 10;

变量type隐藏类型名称type。例如,这段代码

typedef int type;
int main( )
{
    type type = 10;
    type n;   //compile error, type is not a type name
}

出于同样的原因不会编译,在 C++ 中,您可以使用::type来引用类型名称:

typedef int type;
int main( )
{
    type type = 10;
    ::type n;  //compile fine
}
于 2013-10-11T05:49:58.897 回答