2015-01-31 1 views
1

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

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

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() гарантированно возврата, не с адресами (например, если есть обертки для таНос), я должен заставить их вернуться ограничить? Должен ли я сделать foo и bar ограничивать?

ответ

4

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