Исправление предупреждения "-Wunused-parameter", которое зависит от условий препроцессора. - PullRequest
0 голосов
/ 16 июня 2020

Как исправить предупреждение «-Wunused-parameter», когда использование переменной зависит от условий директивы препроцессора (#if, #else ...).

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
}

Правильно ли это?

[Примечание]: Приведенный здесь пример является очень простой иллюстрацией моего фактического варианта использования.

Ответы [ 2 ]

1 голос
/ 16 июня 2020

Я действительно предпочитаю использовать 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 :: ignore не был разработан для это , поэтому фактическим решением должно быть «(void) преобразование» неиспользуемой переменной.

С C ++ 17 у вас также есть другая альтернатива, атрибуты , в в частности 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);
}

Посмотреть как работает

0 голосов
/ 16 июня 2020

Использование (void) variable - простой способ избежать предупреждений о неиспользуемых переменных, например: около assert s. Альтернативное решение - изменить способ определения печати:

#if defined PRINT
#define PRINTF(str) printf("%s\n", str)
#else
#define PRINTF(str) (void)str;
#endif
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...