__restrict
__declspec
Podobnie jak modyfikator ( restrict
) słowo kluczowe (dwa wiodące podkreślenia '_') wskazuje, __restrict
że symbol nie jest aliasowany w bieżącym zakresie. Słowo __restrict
kluczowe różni się od __declspec (restrict)
modyfikatora w następujący sposób:
Słowo
__restrict
kluczowe jest prawidłowe tylko dla zmiennych i__declspec (restrict)
jest prawidłowe tylko w deklaracjach funkcji i definicjach.__restrict
jest podobny dorestrict
języka C, począwszy od języka C99 i dostępnego w/std:c11
trybie lub/std:c17
, ale__restrict
może być używany zarówno w programach C++, jak i C.Gdy
__restrict
jest używany, kompilator nie będzie propagował właściwości no-alias zmiennej. Oznacza to, że jeśli przypiszesz zmienną__restrict
do zmiennej innej__restrict
niż zmienna, kompilator nadal zezwoli na alias zmiennej innej niż __restrict. Różni się to od zachowania słowa kluczowego językarestrict
C99 C.
Ogólnie rzecz biorąc, jeśli chcesz wpłynąć na zachowanie całej funkcji, użyj __declspec (restrict)
zamiast słowa kluczowego .
Aby uzyskać zgodność z poprzednimi wersjami, jest synonimem, _restrict
__restrict
chyba że określono opcję /Za
kompilatora (Wyłącz rozszerzenia języka).
W programie Visual Studio 2015 lub nowszym __restrict
można używać w odwołaniach języka C++.
Uwaga
W przypadku użycia w zmiennej, która ma volatile
również słowo kluczowe, volatile
będzie mieć pierwszeństwo.
Przykład
// __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;
};
Zobacz też
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla