我需要从项目中删除static_cast的使用,如果添加static_cast,则阻止正常编译,gcc文档没有说明如何在使用static_cast时启用警告。我在gcc文档中搜索了static_cast关键字,但没有找到任何合适的内容。
sycxhyv71#
我非常怀疑是否有任何编译器设置。static_cast是要使用的语言的一个完全正常的特性,并且是优于C风格显式强制转换的首选方式。目前尚不清楚这样的警告有何作用。事实上,static_cast通常用于告诉编译器不要警告可能有问题的隐式转换,如收缩转换。有一个clang-tidy检查cppcoreguidelines-pro-type-static-cast-downcast来警告使用static_cast是向下转换(这可能导致UB,核心指南建议用dynamic_cast替换)。也许还有一些clang-tidy检查或类似的检查,如果static_cast转换也可以隐式地进行,则会发出警告,但这可能会干扰上面提到的约定。您可能需要使用外部工具。像grep -R static_assert .或一些sed/awk这样简单的东西以您想要的方式替换static_assert的使用可能就足够了。如果你真的需要修改解析后的AST,你可能需要写一些东西,例如:基于Clang的库/工具。
static_cast
cppcoreguidelines-pro-type-static-cast-downcast
dynamic_cast
grep -R static_assert .
sed
awk
static_assert
bq3bfh9z2#
它可以被#define阻止。这将生成编译错误
#define
#define static_cast int main() { int x = static_cast<int> (3.14); }
字符串
2条答案
按热度按时间sycxhyv71#
我非常怀疑是否有任何编译器设置。
static_cast
是要使用的语言的一个完全正常的特性,并且是优于C风格显式强制转换的首选方式。目前尚不清楚这样的警告有何作用。事实上,static_cast
通常用于告诉编译器不要警告可能有问题的隐式转换,如收缩转换。有一个clang-tidy检查
cppcoreguidelines-pro-type-static-cast-downcast
来警告使用static_cast
是向下转换(这可能导致UB,核心指南建议用dynamic_cast
替换)。也许还有一些clang-tidy检查或类似的检查,如果
static_cast
转换也可以隐式地进行,则会发出警告,但这可能会干扰上面提到的约定。您可能需要使用外部工具。像
grep -R static_assert .
或一些sed
/awk
这样简单的东西以您想要的方式替换static_assert
的使用可能就足够了。如果你真的需要修改解析后的AST,你可能需要写一些东西,例如:基于Clang的库/工具。bq3bfh9z2#
它可以被
#define
阻止。这将生成编译错误
字符串