__restrict

__declspec Как и модификатор ( restrict ), __restrict ключевое слово (два ведущих символа подчеркивания "_") указывает, что символ не является псевдонимом в текущем область. Ключевое слово __restrict отличается от __declspec (restrict) модификатора следующим образом:

  • __restrict Ключевое слово действительна только для переменных и __declspec (restrict) действительна только в объявлениях и определениях функций.

  • __restrict аналогичен restrict C начиная с C99 и доступен в /std:c11 или /std:c17 режиме, но __restrict может использоваться как в программах C++, так и в C.

  • При __restrict использовании компилятор не будет распространять свойство без псевдонима переменной. То есть, если вы назначаете __restrict переменную не переменной, компилятор по-прежнему разрешает псевдоним переменной, отличной__restrict от __restrict. Это отличается от поведения языка restrict C99 C ключевое слово.

Как правило, если вы хотите повлиять на поведение всей функции, используйте __declspec (restrict) вместо ключевое слово.

Для совместимости с предыдущими версиями является синонимом__restrict, _restrict если не указан параметр /Za компилятора (отключить расширения языка).

В Visual Studio 2015 и более поздних __restrict версиях можно использовать в ссылках на C++.

Примечание.

При использовании переменной, которая также имеет volatile ключевое слово, volatile будет иметь приоритет.

Пример

// __restrict_keyword.c
// compile with: /LD
// In the following function, declare a and b as disjoint arrays
// but do not have same assurance for c and d.
void sum2(int n, int * __restrict a, int * __restrict b,
          int * c, int * d) {
   int i;
   for (i = 0; i < n; i++) {
      a[i] = b[i] + c[i];
      c[i] = b[i] + d[i];
    }
}

// By marking union members as __restrict, tell compiler that
// only z.x or z.y will be accessed in any given scope.
union z {
   int * __restrict x;
   double * __restrict y;
};

См. также

Ключевые слова