C++ 警告C4101未引用的局部变量

C++ 警告C4101未引用的局部变量,c++,compiler-warnings,C++,Compiler Warnings,编译时出错,即使在代码中也不需要警告。这很简单。如果\u XYZ\u未定义,则函数中未使用变量param,编译器会发出一个可转换为以下内容的衰减: 翻译自compilerian: 我的朋友,你问我要一块名为param的内存,但你是 不使用它。你确定这是故意的吗 从C++17开始,我们就可以抑制未使用实体上的警告: void func(char * param) { #ifdef _XYZ_ .....somecode here using param #endif .....lots of co

编译时出错,即使在代码中也不需要警告。

这很简单。如果
\u XYZ\u
未定义,则函数中未使用变量
param
,编译器会发出一个可转换为以下内容的衰减:

翻译自compilerian:

我的朋友,你问我要一块名为
param
的内存,但你是 不使用它。你确定这是故意的吗

从C++17开始,我们就可以抑制未使用实体上的警告:

void func(char * param)
{
#ifdef _XYZ_
.....somecode here using param
#endif
.....lots of code here not using param
}

在C++17的
[[maybe_unused]]
属性之前,您可以使用特定于编译器的命令

在MSVC中,您可以执行以下操作:

#pragma警告(推送)
#杂注警告(禁用:4101)
无效函数(字符*参数)
{
#ifdef_XYZ_
..…此处使用param编写一些代码
#恩迪夫
}
#布拉格警告(pop)
在Borland/Embarcadero中,您可以执行以下操作:

#使用pragma argsused
无效函数(字符*参数)
{
#ifdef_XYZ_
..…此处使用param编写一些代码
#恩迪夫
}
在GCC中,您可以使用以下选项之一:

void func(_属性__((未使用))char*param)
{
#ifdef_XYZ_
..…此处使用param编写一些代码
#恩迪夫
}
void func(_未使用的字符*param)
{
#ifdef_XYZ_
..…此处使用param编写一些代码
#恩迪夫
}
void func([[gnu::unused]]char*param)
{
#ifdef_XYZ_
..…此处使用param编写一些代码
#恩迪夫
}
或者,您可以简单地引用参数,而不使用任何特定于编译器的技巧:

void func(char*param)
{
#ifdef_XYZ_
..…此处使用param编写一些代码
#否则
(无效)参数;
#恩迪夫
}

怎么样:
静态强制转换(参数)

使用同样的方法:

除了强制转换为无效之外,鼓励编译器发出 警告

[[nodiscard]]bool是个好主意();
无效函数(字符*参数)
{
#ifdef_XYZ_
..…此处使用param编写一些代码
#否则
//抑制警告:
静态_-cast(参数);
#恩迪夫
//同样有效的还有:
静态演员(好主意吗?);
}

编译器不会生成任何附加指令:)

这是否回答了您的问题?你有没有尝试搜索什么是
未引用的局部变量
警告?请创建一个它对我的情况没有帮助,我想是的。实际上,你在两个路径中都使用了参数,所以编译器不会生成警告。是的,回答你的特定问题:
我不想要警告
。但是显示的示例,在我不知道的地方,也需要考虑:您必须表达“意图”,即变量未被使用,编译器不需要提醒您。它是/否回答了您是否忘记了“this”变量的问题。不要用一些鬼鬼祟祟的解决方案来掩盖这个意图,其他开发人员会因此诅咒你。以上大多数答案可能有助于解决这个问题的多种解决方案。
void func([[maybe_unused]] char * param)
{
#ifdef _XYZ_
.....somecode here using param
#endif
}
[[nodiscard]] bool is_good_idea();

void func(char * param)
{
#ifdef _XYZ_
  .....somecode here using param
#else
  // suppress warning:
  static_cast<void>(param);
#endif

  // also valid:
  static_cast<void>(is_good_idea());
}