Спасибо 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
.