【问题标题】:C++ mark a function as experimental/not fully implementedC++ 将函数标记为实验性/未完全实现
【发布时间】:2020-08-04 00:35:51
【问题描述】:

我有一个功能,由于各种原因,我需要部分实现,我想防止未来的用户(当我忘记我这样做时,以后读我)知道该功能不完整,有问题并且未经测试。

选项 n1 只是添加评论// Warning this thing is partially implemented and will break randomly 然而,这不会产生编译时警告,所以我不是粉丝。

选项 n2 是使用[[deprecated("reason")]],它的优点是会引发编译警告,但它具有误导性,该功能并未被弃用,它实际上与弃用相反,它是一个 WIP,也许有一天会完全实现。

有其他选择吗?

【问题讨论】:

  • 其实[[deprecated("this function is buggy, and will need fixing")]] 看起来并不可怕。甚至[[deprecated("not really, just incomplete :)")]]
  • 我知道这是一个语言问题,但作为一般的软件实践,提交一半工作代码是个坏主意。我只会正确实现一些基本功能并记录限制。
  • 这是研究代码,通常不可能没有一半工作的代码被你搁置一旁。你不想失去你在原型中投入的所有工作,但你也不想继续花费宝贵的时间在难以实现的算法上,如果你认为你已经找到了新的线索。
  • 如果是研究代码,听起来你真的很想使用 GitHub 之类的代码存储库,而只是在可能有效也可能无效的实验代码上进行分支。如果有效,则合并它,如果无效,则停止该分支上的工作,以保留代码或删除该分支。
  • 这会产生一个问题,随着时间的推移,您重构代码合并可能会成为一场噩梦。如果原型保留在代码中,并且我更改了破坏当前功能的依赖项,我的测试将捕获它并且我可以随时修复它,这比在我需要返回时立即修复所有内容要简单得多它

标签: c++ compilation compiler-warnings deprecation-warning


【解决方案1】:

[[deprecated]] 属性正是它的用途(强调我的):

https://en.cppreference.com/w/cpp/language/attributes

[已弃用]

[不推荐使用(“原因”)]

表示允许使用以该属性声明的名称或实体,但不鼓励出于某种原因

您仍然可以使用该功能,只是收到一条警告消息,提示您不应依赖它的使用。

警告:MSVC 违反标准并发出编译器错误(由于 SDL 标志默认打开)而不是警告。

【讨论】:

【解决方案2】:

标准C++ 中唯一能做到这一点的是[[deprecated("message")]] 属性。

GNU 有一个非标准 Function Attribute 用于warning 消息:

警告(“消息”)
如果在函数声明中使用此属性,并且没有通过死代码消除或其他优化消除对此类函数的调用,则会诊断出包含 message 的警告。这对于编译时检查很有用,尤其是与__builtin_constant_p 和内联函数一起使用。虽然可以在 .gnu.warning* 部分中使用消息定义函数,但使用此属性时,即使存在内联函数或未发出调试信息,也会更早地诊断出问题并提供调用的确切位置。

【讨论】:

    猜你喜欢
    • 2021-10-10
    • 2021-04-18
    • 2010-11-08
    • 2015-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-28
    • 2021-02-21
    相关资源
    最近更新 更多