相关疑难解决方法(0)

预期"警告:未使用的变量"但在C++中没有生成任何内容

测试代码:

struct X {
    X (int x) {}
};

int main() {
    X x1(0);     // nothing!
    X x2 = 0;    // warning: unused variable
    X x3 = X(0); // warning: unused variable
}
Run Code Online (Sandbox Code Playgroud)

为什么没有生成警告x1

笔记:

  • 我正在编译-Wall选项.

  • GCC和Clang都产生相同的输出.

  • 这3行生成相同的汇编指令(asm("nop")为清楚起见放置一些):

    nop                      
    lea    -0x8(%rbp),%rdi   
    mov    $0x0,%esi         
    callq  400600 <X::X(int)>
    nop                      
    lea    -0x10(%rbp),%rdi  
    mov    $0x0,%esi         
    callq  400600 <X::X(int)>
    nop                      
    lea    -0x18(%rbp),%rdi  
    mov    $0x0,%esi         
    callq  400600 <X::X(int)>
    nop
    
    Run Code Online (Sandbox Code Playgroud)
  • 原始类型(例如,typedef int X)不会发生这种情况.

  • 如果原因涉及构造函数中可能存在副作用的事实,则问题变为:为什么我会得到另外两个警告?


编辑:

  • 这不是IMO 这个问题的重复,因为在这种情况下构造函数 …

c++ compiler-warnings

17
推荐指数
1
解决办法
730
查看次数

未检测到未使用的变量

我使用g ++ 4.3.0编译这个例子:

#include <vector>

int main()
{
  std::vector< int > a;
  int b;
}
Run Code Online (Sandbox Code Playgroud)

如果我用最大警告级别编译示例,我会收到一个警告:不使用变量b:

[vladimir@juniper data_create]$ g++ m.cpp -Wall -Wextra -ansi -pedantic
m.cpp: In function ‘int main()’:
m.cpp:7: warning: unused variable ‘b’
[vladimir@juniper data_create]$
Run Code Online (Sandbox Code Playgroud)

问题是:为什么变量a没有报告为未使用?我必须传递哪些参数才能获得变量a的警告?

c++ gcc g++ gcc-warning

6
推荐指数
1
解决办法
373
查看次数

标签 统计

c++ ×2

compiler-warnings ×1

g++ ×1

gcc ×1

gcc-warning ×1