首页 > 解决方案 > 更标准的 __attribute__((warning("msg"))

问题描述

在我的 C++ 库中,我有一个仍然存在的函数,1) 用于调试 2) 用于小型操作。该功能基本上是更高效版本的非常缓慢的回退。(例如,考虑单个分配与 memcpy 的循环)>

出于这个原因,我想在函数被直接或间接实例化后立即发出警告。在没有警告的情况下,很难测试函数是否被实例化调用,因为函数可能通过几层模板代码被实例化调用。

我发现 GCC 的__attribute__((warning("slow function!")))工作做得很好。

template<class T> 
__attribute__((warning("careful this fun is very slow, redesign your algorithm"))) 
void slow_function(T){...}

但是它不是标准的或与clang不兼容。

这种编译时警告有更好的选择吗?

看起来有一个标准[[deprecated("msg")]]属性也可以完成这项工作,问题是它令人困惑,因为这个函数没有被弃用,它是为了方便而存在的。

还有一个,我最近发现了一个#pragma poison可能适用于这里,但是我不明白它是怎么用的,而且这个函数实际上是一个模板类的成员函数,例子中没有考虑这种情况。https://www.fluentcpp.com/2018/09/04/function-poisoning-in-cpp/

标签: c++17compiler-warningsc++20deprecation-warningfunction-attributes

解决方案


推荐阅读