Ограничить тип возвращаемого значения и локальные переменные

Я хорошо понимаю, когда использовать ограничение для аргументов функции. Но все статьи, которые я нашел до сих пор, никогда не упоминают другие объявления (такие как возвращаемые значения функций и локальные переменные).

Вот один пример:

extern int *alloc_foo(void);
extern int *alloc_bar(void);

int *foo = alloc_foo();
foo[i] = 42;
int *bar = alloc_bar();
f(foo[i]);

Если alloc_foo() и alloc_bar() гарантированно возвращают не псевдонимы адресов (например, если есть обертки для malloc), я должен заставить их возвращать ограничение? Должен ли я сделать Foo и запрет бар?

1 ответ

Возврате restrict не имеет смысла, как возвращение const или же volatile не будет Это связано с тем, что возвращаемое значение функции является чисто выражением значения ("rvalue"), а не выражением, обозначающим объект ("lvalue"). Я не знаю, как закодировать знание сглаживания в типе функции без атрибутов GCC (при этом вы могли бы пометить функцию как malloc-подобно) но вызывающий может хранить результат в restrictуказатель объекта и тем самым дать компилятору это знание.

Другие вопросы по тегам