typedef 未替换为数据类型

问题描述 投票:0回答:1

我对下面的代码感到惊讶,

#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" 之前

在第二种情况下,编译器是否无法识别该模式,因为该模式可能与变量的赋值、表达式的求值等相关,而在第一种情况下,因为该模式仅在定义编译器识别的变量时使用它。

c++ c compiler-errors typedef
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
}
© www.soinside.com 2019 - 2024. All rights reserved.