Я нашел этот вопрос очень интересным: Как вызвать ошибку компиляции, если возвращаемое значение функции не проверено?
Речь идет о принудительном применении ошибок компиляции, если вы не проверяете возвращаемое значение. Я написал ответ на этот вопрос, где вы можете использовать расширения gcc следующим образом:
__attribute__ ((warn_unused_result)) int foo (void)
{
return 5;
}
для принудительного предупреждения и компиляции с -Werror=unused-result
, чтобы компилятор выдавал ошибку, если вы не используетевернуть значение как-то.
Теперь я хотел бы создать функции-оболочки для обычных стандартных функций. Идея состоит в том, чтобы переименовать их так:
__attribute__ ((warn_unused_result)) realloc_wrapper(void *ptr, size_t new_size)
{
return realloc(ptr, new_size);
}
Но проблема в том, что это заставляет меня использовать другое имя, что приведет к большому количеству поиска и замены. Конечно, это можно сделать автоматически, но все же. Предпочтительно, я хотел бы иметь возможность создавать заголовок, который я могу использовать вместо стандартного заголовка C для любой программы. Одним из вариантов использования является отладка большой программы. Тогда это немедленно укажет мне на потенциальные причины ошибок.
TL; DR
Короче говоря, я хочу иметь возможность взять эту программу:
#include <stdlib.h>
int main(void)
{
char *ptr;
realloc(ptr, 42);
}
и измените его на:
// Replaced stdlib with a custom header
#include <mystdlib.h>
int main(void)
{
char *ptr;
realloc(ptr, 42);
}
, а затем строка с realloc
должна выдать предупреждение.
Могу добавить, что я в порядке с решением, которое не на 100% идеально. Предполагаемое использование для отладки, а не для производственного кода.
РЕДАКТИРОВАТЬ:
Я только что заметил, что realloc
был плохой выбор, так как, кажется, это объявление уже есть по умолчанию, но я использовал PSkocik и заставил его работать для fgets
.