линт производит некоторое предупреждение как:
foo.c XXX Warning 534: Ignoring return value of function bar()
Из руководства линта
534 возвращаемых значения Игнорирования функции
'Символ' (соответствуют Местоположению) функция, которая возвращает значение, называют только для побочных эффектов как, например, в операторе отдельно или левой стороне оператора запятой. Попробуйте: (пустая) функция (); вызывать функцию и игнорировать ее возвращаемое значение. См. также fvr, fvo и флаги ФРГ в §5.5 "Опции Флага".
Я хочу получить это предупреждение, если там существует кто-либо, во время компиляции. Есть ли какая-либо опция в gcc/g ++ для достижения этого? Я включил -Wall
но это, по-видимому, не обнаружило это.
Спасибо 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
.
-Wunused-result
должен сделать это для тебя. Это не одно из предупреждений - включается стена:
http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
К функции должен быть применен атрибут warn_unused_result ( Спасибо paxdiablo).