用于查找C风格演员表的工具

waf*_*man 32 c c++

有没有人知道我可以用来在代码中找到显式C风格的演员表的工具?我正在重构一些C++代码,并希望尽可能替换C风格的转换.

示例C风格的演员将是:

Foo foo = (Foo) bar;
Run Code Online (Sandbox Code Playgroud)

相比之下,C++样式转换的例子是:

Foo foo = static_cast<Foo>(bar);
Foo foo = reinterpret_cast<Foo>(bar);
Foo foo = const_cast<Foo>(bar);
Run Code Online (Sandbox Code Playgroud)

jon*_*ner 33

如果你正在使用gcc/g ++,只需为C风格的强制转换启用警告:

g++ -Wold-style-cast ...
Run Code Online (Sandbox Code Playgroud)

  • +1使用最好的工具和最简单的工作方法...如果可行的话. (5认同)
  • https://developercommunity.visualstudio.com/idea/550695/add-compile-option-to-warn-on-c-style-cast-usage.html (2认同)

小智 8

这种演员阵容难以搜寻的事实是首先引入新式演员阵容的原因之一.如果你的代码工作正常,这似乎是一个毫无意义的重构 - 每当我修改周围的代码时,我只需将它们改为新式的转换.

话虽如此,你在C++代码中使用C风格的强制转换这一事实表明代码有问题应该修复 - 我不会做全局替换,即使这是可能的.

  • @waffleman:只要没有人*看到*演员,没有人会反对他们不符合你的指导方针.所以,当你(或其他人)找到它们时,请修复它们.积极寻找它们似乎是浪费时间.只是不要写*更多*,并修复旧的,因为它们会引起你的注意. (3认同)

sth*_*sth 8

搜索正则表达式\)\w会产生令人惊讶的好结果.

  • 只有当你把演员表放在变量旁边时才有效...你应该总是这样,但不是每个人都这样做. (3认同)

grr*_*sel 6

所述卸载C++编译器支持的选项作为一个编译时间错误报告所有这样类型转换,以及这种类型转换的语义限制用的static_cast更安全的等效性.

相关选项包括:

-cp_nocstylecasts   
Run Code Online (Sandbox Code Playgroud)

编译器将在所有C样式转换上发出错误.C++代码中的C风格转换可能是不安全的,并导致不期望的或未定义的行为(例如,将指针转换为不相关的struct/class类型).此选项对于重构以查找所有这些强制转换并将其替换为更安全的C++强制转换(如static_cast)非常有用.

-cp_c2staticcasts   
Run Code Online (Sandbox Code Playgroud)

编译器将C++ static_cast的更受限制的语义应用于C样式转换.打开此选项编译代码可确保C样式转换至少与C++ static_casts一样安全

如果现有代码具有大量C样式转换并且将每个转换重构为C++转换,则此选项很有用.