-Wlifetime标志的目的是什么?

6

-Wlifetime编译标志在clang中的作用是什么?

我在互联网上找到的信息非常模糊。这是一个显著的特性吗?


1
编译器可以检测到悬空指针等问题。请参见 https://herbsutter.com/2018/09/20/lifetime-profile-v1-0-posted/ 或在 godbolt 上查看示例 https://godbolt.org/z/szJjnH。 - Max
1
如果这个能在文档中找到就太好了! - Lightness Races in Orbit
1
@atrak,Git提交不是最好的文档吗? ;p - Yakk - Adam Nevraumont
1
@YSC:仍应该被记录! - Lightness Races in Orbit
我的clang 13中无法使用Wlifetime。它已被弃用还是从未真正存在过? - alfC
显示剩余2条评论
2个回答

6

这个标志分析本地文件,看代码是否可能使用指向已死对象的指针。您可以在YouTube上观看Herb Sutter的cppcon视频,他非常好地解释了这一点:https://youtu.be/80BZxujhY38


1

这是一个实验性标志,它存在于https://github.com/mgehre/clang/tree/lifetime的clang开发分支中,后来移动到了https://github.com/mgehre/llvm-project/tree/lifetime

意图是强制执行C++指南关于生命周期的部分,即所谓的生命周期配置文件https://herbsutter.com/2018/09/20/lifetime-profile-v1-0-posted/

在clang实验实现的许多警告中,现在有两个已成为常规clang的一部分(我在我的clang 16中看到它们)。

  • -Wdangling-gsl
  • -Wreturn-stack-address

根据https://github.com/mgehre/llvm-project/issues/98上的讨论,其余部分似乎不再处于活跃开发状态。

因此,目前运行这些检查的最佳选择是使用MSVC编译器,该编译器自Visual Studio 2019以来实现了(部分)生命周期配置文件,https://devblogs.microsoft.com/cppblog/lifetime-profile-update-in-visual-studio-2019-preview-2/,并且有关Visual Studio 2022的更新https://devblogs.microsoft.com/cppblog/high-confidence-lifetime-checks-in-visual-studio-version-17-5-preview-2/

请注意,C++核心准则中的生命周期与(针对Rust互操作性的)clang生命周期注释不同,这些注释在https://discourse.llvm.org/t/rfc-lifetime-annotations-for-c/61377中提出,并在clang和https://github.com/google/crubit/blob/main/docs/lifetimes_static_analysis.md中实现。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接