16
голосов
6ответов
2434 просмотров

What can human beings make out of the restrict qualifier?

If I got the C99 restrict keyword right, qualifying a pointer with it is a promise made that the data it references won't be modified behind the compiler's back through aliasing. By contrast, the way I understand the const qualifier is as compiler-enforced documentation that a given object won't...

12
голосов
3ответов
2324 просмотров

What are the semantics of C99's "restrict" with regards to pointers to pointers?

I am doing lots of matrix arithmetic and would like to take advantage of C99's restrict pointer qualifier. I'd like to setup my matrices as pointers to pointers to allow for easy subscripting, like so: int **A = malloc (ncols * sizeof(int *)); A[0] = malloc (nrows * ncols * sizof(int)); for (in...

5
голосов
1ответов
1831 просмотров

error using restrict keyword

In the following example: void foo (double *ptr) { const double * restrict const restr_ptr=ptr; } I get this error: error: expected a ";" const double * restrict const restr_ptr=ptr; ^ I compile with -std=c99, using gcc 3.4...

2
голосов
3ответов
378 просмотров

ограниченность с pre-c99

Учитывая этот код, VC9 не обнаруживает алиасинг: typedef struct { int x, y; } vec_t; void rotate_cw(vec_t const *from, vec_t *to) { /* Notice x depends on y and vice versa */ to->x = from->y; to->y = -from->x; } /* ... */ vec_t a, b; ...

25
голосов
3ответов
7801 просмотров

Когда использовать ограничение, а когда нет

У меня есть общее представление о restrict, но я надеюсь прояснить некоторые тонкости. У меня есть функция, которая считывает строку с завершающим нулем из одного буфера и записывает версию в кодировке URL в другой буфер. Функция имеет эту сигнатуру (в настоящее время без restrict): char cons...

182
голосов
6ответов
105035 просмотров

Что означает ключевое слово restrict в C ++?

Я всегда был не уверен, что означает ключевое слово restrict в C ++? Означает ли это, что два или более указателя, заданных функции, не перекрываются? Что еще это значит?

186
голосов
2ответов
48825 просмотров

Реалистичное использование ключевого слова C99 «restrict»?

Я просматривал документацию и вопросы / ответы и увидел, что это упомянуто. Я прочитал краткое описание, в котором говорилось, что это будет в основном обещание программиста, что указатель не будет использоваться для указания куда-то еще. Может ли кто-нибудь предложить несколько реальных прим...

23
голосов
5ответов
6068 просмотров

Ограничивает ли справку в C, если указатель уже помечен как const?

Просто интересно: когда я добавляю ограничение к указателю, я говорю компилятору, что указатель не является псевдонимом для другого указателя. Предположим, у меня есть такая функция: // Constructed example void foo (float* result, const float* a, const float* b, const size_t size) { for ...