Я не верю, что это дубликат, потому что функция возвращает в счастливом пути. Использование атрибута no-return
позволяет компилятору оптимизировать в предположении, что функция никогда не вернется, что здесь не так.
Я получил код C, который либо возвращает указатель, либо вызывает другую функцию для выхода из программы. Это в операторе if
, поэтому он либо возвращает результат, либо завершает работу. Поскольку функция возвращает void *
, компилятор предупреждает, что, возможно, функция не будет возвращать значение (что, конечно, верно):
error: control reaches end of non-void function [-Werror=return-type]
Я могу обойти это, просто добавив return *temp;
в конец функции, но я хотел бы прояснить свое намерение, имея что-то вроде атрибута неиспользуемой переменной:
__attribute__((__unused__))
Таким образом, я могу оставить -Wall
включенным и не добавлять ненужный или, возможно, сбивающий с толку код.
Я также был бы готов переписать код, если есть лучший способ выразить это намерение.
Код выглядит примерно так:
void *get_memory() {
void *temp = malloc(100);
if (temp) {
// do some setup work
return temp;
} else {
exit_program_with_epic_fail();
}
// Compiler warns if the following line isn't present
return temp;
}