typedef没有替换为数据类型

时间:2013-10-11 05:43:28

标签: c++ c compiler-construction compiler-errors typedef

我对以下代码感到惊讶,

#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“

之前

编译器是否在第二种情况下无法识别模式,因为此模式可能与变量的赋值,表达式的求值等有关,并且在第一种情况下,因为此模式仅在定义变量时使用编译器认出了它。

1 个答案:

答案 0 :(得分: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
}