gpt4 book ai didi

c++ - 警告 : function 'F' is not needed and will not be emitted

转载 作者:行者123 更新时间:2023-12-01 12:05:02 25 4
gpt4 key购买 nike

这是一个小程序( live on godbolt ):

static void UnusedDeclaration ();
static void UnusedDefinition () {}
static void Declaration ();

decltype (Declaration ())* global;

理想情况下,如果我用 clang 编译它,我会期待以下警告, -Wunused :
  • UnusedDeclaration () : 它是一个带有内部链接的未使用的函数声明。所以我应该得到警告。
  • UnusedDefinition () : 它是一个未使用的函数定义,具有内部链接。所以我应该得到警告。
  • Declaration () : 使用此声明。所以我应该不是 得到警告。

  • 实际上,所有三种情况都会收到警告:
    warning: unused function 'UnusedDeclaration'
    warning: unused function 'UnusedDefinition'
    warning: function 'Declaration' is not needed and will not be emitted

    我对案例 3 有问题。我认为,编译器不应该警告我任何事情,但它确实如此。
  • 为什么我会收到案例 3 的警告?
  • function 'Declaration' is not needed – 老实说,我需要那个声明。我在未评估的上下文中使用它,编译器不需要提示它。
  • and will not be emitted – 我不确定发射是什么意思。我写了一个 separate question关于它。
  • 是否有警告标志的组合在命令行上传递给编译器,以实现我的预期(情况 1 和 2 的警告,情况 3 的没有警告)。
  • 我可以使用 -Wunused -Wno-unneeded-internal-declaration 关闭案例 3 的警告,但我不知道我是否会丢失一些重要信息。也许在其他一些情况下,此警告很有用。第三个警告是在什么确切情况下出现的?
  • 最佳答案

    没有引用第一个函数,所以基本可以忽略。

    第二个函数被“调用”,但正如您所指出的,仅在未评估的上下文中。这意味着永远不会评估调用。编译器确定函数被调用时将返回的类型,但仅此而已。由于它从未真正被调用过,因此函数本身从不需要或用作函数,因此编译器不会为它生成任何代码。

    消息是不同的,因为即使最终效果相同,每个达到的结果也略有不同,并且编译器正在尝试为您提供可能有用的信息。

    关于c++ - 警告 : function 'F' is not needed and will not be emitted,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58245033/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com