Ограничить тип возвращаемого значения и локальные переменные
Я хорошо понимаю, когда использовать ограничение для аргументов функции. Но все статьи, которые я нашел до сих пор, никогда не упоминают другие объявления (такие как возвращаемые значения функций и локальные переменные).
Вот один пример:
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
указатель объекта и тем самым дать компилятору это знание.