是否存在static_warning?
问题:
已知Boost提供“静态警告”功能。然而,这个问题旨在专门探索实现自定义 static_warning 功能的可能性,该功能的操作与 static_assert 类似,但在编译时发出警告而不是中止编译。
答案:
是的,可以使用 GCC 或 MSVC 实现自定义 static_warning 功能。该实现利用宏 DEPRECATE 定义发出警告的函数,并使用一系列嵌套宏来创建所需的功能。
用法:
自定义 static_warning 可以像这样使用:
<code class="cpp">STATIC_WARNING(condition, "Warning message here");</code>
…
例如,此代码将发出警告:
<code class="cpp">STATIC_WARNING(true, "This warning is intended");</code>
实现:
实现依赖宏来实现 gewünschten 行为:
<code class="cpp">#define DEPRECATE(foo, msg) foo __attribute__((deprecated(msg))) #define STATIC_WARNING(cond, msg) ... ... struct true_type {}; struct false_type {}; template<int test> struct converter : public true_type {}; template<> struct converter<0> : public false_type {}; ... STATIC_WARNING(cond, msg) { DEPRECATE(void _(const detail::false_type&), msg) {}; void _(const detail::true_type& ) {}; PP_CAT(static_warning,__LINE__)() {_(::detail::converter<(cond)>>());} }</code>
示例:
考虑以下代码:
<code class="cpp">STATIC_WARNING(1 == 1, "This is not a warning"); STATIC_WARNING(1 != 1, "This should generate a warning");</code>
当使用适当的警告级别编译时,第二行将触发警告。
以上是我们可以用 C 实现自定义“static_warning”功能吗?的详细内容。更多信息请关注PHP中文网其他相关文章!