C++ Typedef更改行为导致错误和警告
下面是一些关于typedef修改的实验,我无法理解2和6行。为什么2和5给出不同的结果? 请给我澄清一下C++ Typedef更改行为导致错误和警告,c++,c,typedef,declaration,C++,C,Typedef,Declaration,下面是一些关于typedef修改的实验,我无法理解2和6行。为什么2和5给出不同的结果? 请给我澄清一下 typedef long _long; extern _long tl; //1 Fine...OK extern _long int tli; //2 extraneous `int' ignored...?? extern int _long til; //3 `_long' does not name a type...OK extern long l;
typedef long _long;
extern _long tl; //1 Fine...OK
extern _long int tli; //2 extraneous `int' ignored...??
extern int _long til; //3 `_long' does not name a type...OK
extern long l; //4 Fine...OK
extern long int li; //5 Fine...OK
extern int long il; //6 Fine...??
typedef
关键字为完整类型而不是其他关键字创建别名
例如
extern _long int tli;
和你做的差不多
extern long int int tli;
typedef
关键字为完整类型而不是其他关键字创建别名
例如
extern _long int tli;
和你做的差不多
extern long int int tli;
您试图以类似于宏的方式使用
typedef
s,但它们不是这样工作的
当您typedef long\u long
时,表达式\u long int
不会扩展到long int
,它只是成为编译器错误,因为long
和int
成为变量的两种类型
您可以将简历资格应用于此类类型,例如:
extern const _long foo;
或:
如果您希望某个对象实际上是长int
,可以为此设置typedef:
typedef long int MyLongInt;
另外,顺便说一句,不要在typedef的名字前面加下划线。该标准保留了许多带有前导下划线的名称。有关详细信息,请参阅。您试图以类似于宏的方式使用
typedef
s,但它们不是这样工作的
当您typedef long\u long
时,表达式\u long int
不会扩展到long int
,它只是成为编译器错误,因为long
和int
成为变量的两种类型
您可以将简历资格应用于此类类型,例如:
extern const _long foo;
或:
如果您希望某个对象实际上是长int
,可以为此设置typedef:
typedef long int MyLongInt;
另外,顺便说一句,不要在typedef的名字前面加下划线。该标准保留了许多带有前导下划线的名称。有关更多信息,请参阅。首先,不要使用带前导下划线的全局名称,它们由规范保留。只需备注:
long x代码>,长整数x代码>和int长x代码>都是等价的是,我在这里使用它只是为了便于阅读。首先,不要使用带前导下划线的全局名称,它们是规范保留的。只需一句话:长x代码>,长整数x代码>和int长x代码>都是等价的是的,我在这里使用它只是为了方便阅读。谢谢你的解释。顺便说一句,我用了_long来澄清,是的,应该避免。谢谢你的建议。:)谢谢你的解释。顺便说一句,我用了_long来澄清,是的,应该避免。谢谢你的建议。:)