修复取决于预处理器条件的“-Wunused-parameter”警告
Fixing "-Wunused-parameter" warning which depends on pre-processor conditions
当变量的使用取决于预处理器指令(#if、#else ...)条件时,如何修复“-Wunused-parameter”警告。
void foo(std::string& color)
{
#ifdef PRINT
printf("Printing color: ", color);
#endif
}
我看过 (void) 的用法,例如:
void foo(std::string& color)
{
#ifdef PRINT
printf("Printing color: ", color);
#else
(void)color;
#endif
}
这是正确的方法吗?
[注意]:这里提到的例子是我实际用例的一个非常低的说明。
使用 (void) variable
是避免未使用变量警告的简单方法,例如:在 assert
左右。另一种解决方案是更改 print 的定义方式:
#if defined PRINT
#define PRINTF(str) printf("%s\n", str)
#else
#define PRINTF(str) (void)str;
#endif
我真的更喜欢使用 std::ignore:
// Example program
#include <iostream>
#include <string>
#include <tuple> // for std::ignore
void foo(std::string& color)
{
#ifdef PRINT
printf("Printing color: ", color.c_str());
#else
std::ignore = color;
printf("Not printing any color");
#endif
}
现在说实话,建议std::ignorehas not been designed for that,所以实际的解决方法应该还是“(void)
强制转换”未使用的变量
对于 C++17,您还有另一种选择,attributes, in particular maybe_unused
:
// Example program
#include <iostream>
#include <string>
void foo([[maybe_unused]] std::string& color) //
{
#ifdef PRINT
printf("Printing color: %s", color.c_str());
#else
printf("Not printing any color");
#endif
}
int main()
{
std::string color("red");
foo(color);
}
当变量的使用取决于预处理器指令(#if、#else ...)条件时,如何修复“-Wunused-parameter”警告。
void foo(std::string& color)
{
#ifdef PRINT
printf("Printing color: ", color);
#endif
}
我看过 (void) 的用法,例如:
void foo(std::string& color)
{
#ifdef PRINT
printf("Printing color: ", color);
#else
(void)color;
#endif
}
这是正确的方法吗?
[注意]:这里提到的例子是我实际用例的一个非常低的说明。
使用 (void) variable
是避免未使用变量警告的简单方法,例如:在 assert
左右。另一种解决方案是更改 print 的定义方式:
#if defined PRINT
#define PRINTF(str) printf("%s\n", str)
#else
#define PRINTF(str) (void)str;
#endif
我真的更喜欢使用 std::ignore:
// Example program
#include <iostream>
#include <string>
#include <tuple> // for std::ignore
void foo(std::string& color)
{
#ifdef PRINT
printf("Printing color: ", color.c_str());
#else
std::ignore = color;
printf("Not printing any color");
#endif
}
现在说实话,建议std::ignorehas not been designed for that,所以实际的解决方法应该还是“(void)
强制转换”未使用的变量
对于 C++17,您还有另一种选择,attributes, in particular maybe_unused
:
// Example program
#include <iostream>
#include <string>
void foo([[maybe_unused]] std::string& color) //
{
#ifdef PRINT
printf("Printing color: %s", color.c_str());
#else
printf("Not printing any color");
#endif
}
int main()
{
std::string color("red");
foo(color);
}