[[maybe_unused]] 属性不起作用

问题描述 投票:0回答:2

我试图使用新的 c++17 属性

unused parameter
忽略
[[maybe_unused]]
警告,如下所示。

int main([[maybe_unused]] int argc, char** argv)
{
    //...
}

但是我仍然收到

warning: unused parameter ‘argc’ [-Wunused-parameter]
并带有以下附加警告。

warning: ‘maybe_unused’ attribute directive ignored [-Wattributes]

我将

g++ (GCC) 7.2.0
cmake-3.11.3
一起使用。我的编译器标志如下。

-std=c++17 -Wall -pedantic -Wextra -Weffc++

我记得以前成功使用过此属性,但我不知道为什么现在不起作用。有人可以告诉我我在这里做错了什么吗?

c++ gcc cmake c++17
2个回答
0
投票

您可以通过这种方式抑制有关未使用变量的警告:

int main(int /* argc */, char** argv)
{
    //...
}

或使用以下技巧:

int main(int argc, char** argv)
{
    (void)argc;

    //...
}

在这种情况下,此代码适用于早期版本的 C++ 标准,甚至适用于纯 C。


0
投票

我尝试了代码,但没有收到任何警告。

  • 主.cpp
#include <iostream>

int main([[maybe_unused]] int argc, [[maybe_unused]]char** argv)
{
    return 0;
}
  • CMakeLists.txt
cmake_minimum_required(VERSION 3.1)
project(example)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
  add_compile_options(-Wall -Wextra -Wpedantic -Weffc++)
endif()

add_executable(${PROJECT_NAME} main.cpp)
  • 构建
cmake -B build
cd build
make

注意:也可以使用(void)作为第二种方法来解决问题

g++ --version
g++ (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0
cmake --version
cmake version 3.22.1
© www.soinside.com 2019 - 2024. All rights reserved.