Partilhar via


__restrict

Como o modificador __declspec ( restrict ), a palavra-chave __restrict (dois sublinhados à esquerda '_') indica que um símbolo não tem alias no escopo atual. A palavra-chave __restrict difere do modificador __declspec (restrict) das seguintes maneiras:

  • A palavra-chave __restrict só é válida em variáveis, e __declspec (restrict) só é válido em declarações e definições de função.

  • __restrict é semelhante a restrict para C do C99 em diante e disponível no modo /std:c11 ou /std:c17, mas __restrict pode ser usado em programas C++ e C.

  • Quando __restrict é usado, o compilador não propaga a propriedade no-alias de uma variável. Isto é, se você atribuir uma variável __restrict a uma variável não __restrict, o compilador ainda permitirá que a variável não restrita por __ tenha alias. Isso é diferente do comportamento da palavra-chave restrict da linguagem C99.

Em geral, se você quer afetar o comportamento de toda uma função inteira, use __declspec (restrict), em vez da palavra-chave.

Para compatibilidade com versões anteriores, _restrict é um sinônimo para __restrict, a menos que a opção do compilador /Za (Desabilitar extensões de linguagem) seja especificada.

No Visual Studio 2015 e posteriores, __restrict pode ser usado em referências C++.

Observação

Quando usada em uma variável que também tem a palavra-chave volatile, volatile terá precedência.

Exemplo

// __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;
};

Confira também

Palavras-chave