__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 arestrict
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-chaverestrict
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
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários