Udostępnij za pośrednictwem


__restrict

Podobnie jak restrict__declspec , modyfikator __restrict słowa kluczowego wskazuje, że symbol jest aliasu w bieżącym zakresie. __restrict Słowa kluczowego różni się od restrict __declspec modyfikator w następujący sposób:

  • __restrict Słowo kluczowe jest ważny tylko dla zmiennych, oraz __declspec(restrict) jest prawidłowa tylko dla deklaracji funkcji i definicje.

  • Gdy __restrict jest używana, kompilator nie będzie propagować właściwości aliasu nr zmiennej.Oznacza to Jeśli przypiszesz __restrict zmienna, innego niż-__restrict zmiennej, kompilator nie będzie oznaczała, non-__restrict zmienna nie jest aliasu.To różni się od zachowania restrict od specyfikacji C99 słowa kluczowego.

Ogólnie, jeśli mają wpływ na zachowanie Cała funkcja, lepiej jest używać __declspec niż słowa kluczowego.

__restrictjest podobny do restrict z C99 spec, ale __restrict mogą być używane w programach C++ lub C.

Brak obsługi dla __restrict na odwołania C++. 

[!UWAGA]

Kiedy używany w zmiennej, która ma również lotne (C++) słowa kluczowego, volatile będą miały 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ż

Informacje

Słów kluczowych języka C++