Typedef改变行为导致错误和警告
Typedef changing behaviour causing error and warning
下面是一些关于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; //4 Fine...OK
extern long int li; //5 Fine...OK
extern int long il; //6 Fine...??
您试图以类似于宏的方式使用typedef
,但它们不是这样工作的。
当您typedef long _long
时,表达式_long int
不会扩展到long int
,它只是变成一个编译器错误,因为long
和int
成为变量的两种类型。
你可以将简历资格申请到这样一种类型,例如:
extern const _long foo;
或者:
volatile _long bar;
如果你想让某个东西实际上是long int
,你可以为它设置一个typedef:
typedef long int MyLongInt;
此外,顺便说一句,不要用前导下划线来命名typedef。本标准保留了许多带有前导下划线的名称。有关详细信息,请参阅此。
typedef
关键字为完整类型创建别名,而不是为另一个关键字创建别名。
因此,例如
extern _long int tli;
和你做差不多
extern long int int tli;
相关文章:
- 我在 C++ 代码中遇到错误警告:控制到达非空函数 [-Wreturn 类型] 的末尾
- G++ 编译器未为未定义的方法生成错误/警告
- 一个语句中没有多个 cout 的错误/警告
- Clang:覆盖之前在命令行上指定的所有警告和错误警告标志
- 放置新位置的错误警告
- Xcode 8.3.2 中的错误警告:文件的非可移植路径 - 指定的路径与磁盘上的文件名不同
- 编译错误:(警告:控制到达非空函数 [-wreturn 类型] 的末尾)
- snprintf:相同的代码-在不同的g++编译器上有不同的错误/警告
- 有没有办法自定义编译错误/警告消息
- 获取错误:警告C4715::并非所有控制路径都返回值,但不确定原因
- 导致.exe错误警告
- 如何在 SysntasticCheck for vim 中显示所有" g++ -Wall "错误警告?
- 开发基本的C++代码+检查错误/警告
- 如何使g++为int i=i生成错误/警告
- 我得到以下错误:[警告]多字符字符常量
- C++错误:警告:多字符字符常量/a用于用法
- C++ 在开关中隐式跌倒时强制编译时错误/警告
- 打印矩阵时,C ++程序停止,没有错误警告
- Xcode typedef 的 struct 创建错误/警告
- 主函数给出错误警告