g ++, Как получить предупреждение при игнорировании функционального возвращаемого значения

линт производит некоторое предупреждение как:

foo.c XXX Warning 534: Ignoring return value of function bar()

Из руководства линта

534 возвращаемых значения Игнорирования функции

'Символ' (соответствуют Местоположению) функция, которая возвращает значение, называют только для побочных эффектов как, например, в операторе отдельно или левой стороне оператора запятой. Попробуйте: (пустая) функция (); вызывать функцию и игнорировать ее возвращаемое значение. См. также fvr, fvo и флаги ФРГ в §5.5 "Опции Флага".

Я хочу получить это предупреждение, если там существует кто-либо, во время компиляции. Есть ли какая-либо опция в gcc/g ++ для достижения этого? Я включил -Wall но это, по-видимому, не обнаружило это.

26
задан iammilind 5 September 2016 в 12:44
поделиться

2 ответа

Спасибо WhirlWind и paxdiablo за ответ и комментарий. Вот моя попытка собрать воедино полный (?) Ответ.

-Wunused-result - это соответствующий параметр gcc. И он включен по умолчанию . Цитата из страницы параметров предупреждений gcc :

-Wno-unused-result

Не предупреждать, если вызывающий объект функции отмечен атрибутом warn_unused_result (см. Атрибуты переменной ) не использует возвращаемое значение. Значение по умолчанию - -Wunused-result

Итак, решение состоит в применении атрибута warn_unused_result к функции.

Вот полный пример. Содержимое файла unused_result.c

int foo() { return 3; }

int bar() __attribute__((warn_unused_result));
int bar() { return 5; }

int main()
{
    foo();
    bar();    /* line 9 */
    return 0;
}

и соответствующий результат компиляции:

$gcc unused_result.c 
unused_result.c: In function ‘main’:
unused_result.c:9: warning: ignoring return value of ‘bar’, declared with attribute warn_unused_result

Обратите внимание еще раз, что нет необходимости иметь -Wunused-result , так как это значение по умолчанию. У кого-то может возникнуть соблазн явно упомянуть об этом, чтобы сообщить о намерении. Хотя это благородное намерение, но после анализа ситуации мой выбор, однако, был бы против этого. Поскольку наличие -Wunused-result в параметрах компиляции может вызвать ложное ощущение безопасности / удовлетворения, которое неверно, если все функции в базе кода не квалифицированы с помощью warn_unused_result .

27
ответ дан 28 November 2019 в 07:02
поделиться

-Wunused-result должен сделать это для тебя. Это не одно из предупреждений - включается стена:

http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html

К функции должен быть применен атрибут warn_unused_result ( Спасибо paxdiablo).

6
ответ дан 28 November 2019 в 07:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: