1

将原始类型的typedef转换为另一种原始类型是否有效?

typedef int long;

在 VS 2012 上,发出警告但编译正常。

警告 C4091:“typedef”:当没有声明变量时,“long”左侧被忽略

但是在 gcc-4.3.4 上,它失败了。

错误:声明没有声明任何东西。

哪个编译器符合标准?

PS:我不会在生产代码中写这样的东西。只是想出了想法和检查。

4

3 回答 3

7

它是有效的 C++

编号 C++11,第 7.1.3.6 节:

在给定的范围内,不应使用 typedef 说明符来重新定义在该范围内声明的任何类型的名称以引用不同的类型。

于 2012-11-30T16:28:28.207 回答
5

他们都在说同样的事情,但有人将其报告为错误。请注意,VS 警告显示“typedef 已被忽略”。问题是int longandlong int是同义词,所以你基本上是在创建一个未命名typedeflong.

于 2012-11-30T16:27:59.267 回答
2

两者都按照标准的要求做。该 typedef 无效,两个编译器都会发出诊断信息。

于 2012-11-30T17:12:36.483 回答