Я заметил тяжелое использование ключевого слова restrict
в одном из наших унаследованных проектов.
Я понимаю обоснование для restrict
, но я задаю вопрос о его полезности при применении к некоторым из этих функций.Является ли ключевое слово ограничения бессмысленным по параметрам уникальных типов указателей?
Возьмите следующие два примера:
void funcA(int *restrict i){
// ...
}
void funcB(int *restrict i, float *restrict f){
// ...
}
int main(){
int i = 1;
float f = 3.14;
funcA(&i);
funcB(&i,&f);
}
Есть ли действительная причина одна может помечать параметры funcA
и funcB
с restrict
?
funcA
принимает только один параметр. Как он мог иметь тот же адрес, что и все остальное?
funcB
принимает параметры разных типов. Если бы они были тем же адресом, разве это уже не нарушало бы правило строгого сглаживания?
Если функция может использовать глобальные указатели/объекты, я думаю, что 'ограничение' имеет значение. – chux
Что касается указателей на разные типы, C указывает 'char * fgets (char * restrict s, int n, FILE * ограничивать поток);' поэтому он выглядит, что стандартный комитет видит значение с 'ограничением' для разных типов. – chux
Интересно. Хотя это не char, как исключение, поскольку char * разрешено указывать на любой другой тип. –