如何在源代码中找到所有旧的C风格演员?
我正在使用Visual Studio,可能有一些编译器警告,我必须启用?
答案 0 :(得分:24)
GCC有-Wold-style-cast
选项,如果找到任何C风格的演员表,它会发出警告。
答案 1 :(得分:7)
我不知道报告这些的编译器开关,或Visual Studio中内置的任何其他内容。
但是,这里有一个Perl script,它将搜索您的源代码树并查找源代码中的所有C样式转换。它可以很好地跟踪它们。
答案 2 :(得分:6)
不幸的是,在Visual C ++中没有一个编译器警告指出这些强制转换(至少不是我所知道的那个),虽然它看起来像PC-Lint确实提供警告/注释,如果你使用的话会发出警告旧式演员。取决于你是否愿意花钱购买PC-Lint - 在我看来,它绝对值得你能找到的所有问题......
答案 3 :(得分:-10)
你为什么需要那个?你想摆脱所有这些吗?
基本类型(如(double)
)的C风格转换是安全的,看起来比static_cast<double>()
好得多。我个人更喜欢这种风格。
在多态类的情况下,C风格的演员表的问题被夸大了。仅当您使用多重继承并且必须进行交叉强制转换时,它可能是一个问题。默认情况下,C风格的强制转换在那里不起作用。但在大多数情况下,()
的工作原理与static_cast<>()
完全相同,我不会浪费时间更换它们。无论如何,对于多态类型,我在编写新代码或改变某些东西时使用C ++风格的强制类型。
更新:
伙计们,我似乎不太清楚地表达了我的观点。是的,我知道这个理论:C ++ - 演员是好的,C演员是邪恶的。需要此规则(以及大多数其他规则)来保存C ++中的新手。但这并不意味着你总是需要遵循它。
我的观点是C风格的演员表并不那么可怕。如果你写一些像
这样的函数int convertFooToBar(double i_foo)
,没有理由在实现中使用C ++样式的强制转换。它们并不比(int)
更安全,但看起来很混乱。在这种情况下,施放并不棘手。在演员阵容中没有任何坏事或狡猾:有时演员阵容很自然。
关于搜索:我不记得我在过去10年中正在搜索任何演员陈述,尽管我每天都在维护数百万行遗留C ++代码。我甚至不记得由于错误的铸造造成的任何严重问题。
最初的问题是关于替换已经写过的C风格的演员阵容。所以,我的答案是:
是的,C ++风格的演员阵容更好 比C风格更安全。但它 并不意味着你需要搜索 对于您的代码中的旧代码并尝试 摆脱所有这些。实际上,这不是一个真正的问题。只是不要浪费你的时间。您可以将其用于搜索和删除一些过时的代码。它对你的代码库更有用。