Sdílet prostřednictvím


__restrict

Podobně jako modifikátor restrict __declspec označuje klíčové slovo __restrict skutečnost, že symbol nemá v aktuálním oboru alias.Klíčové slovo __restrict se od modifikátoru restrict __declspec liší následujícími způsoby:

  • Klíčové slovo __restrict je platné pouze pro proměnné, klíčové slovo __declspec(restrict) je platné pouze pro deklarace a definice funkcí.

  • Je-li použito klíčové slovo __restrict, kompilátor nebude šířit vlastnost proměnné, že nemá alias.Přiřadíte-li tedy proměnnou s klíčovým slovem __restrict do proměnné bez klíčového slova __restrict, kompilátor absenci aliasu pro proměnnou bez klíčového slova __restrict neprojeví.Zde je rozdíl oproti chování klíčového slova restrict dle specifikace C99.

Obecně je vhodnější při ovlivňování chování celé funkce použít direktivu __declspec než toto klíčové slovo.

Klíčové slovo __restrict se podobá klíčovému slovu restrict dle specifikace C99, slovo __restrict však lze použít v programech jazyka C++ i C.

V odkazech jazyka C++ neexistuje podpora klíčového slova __restrict. 

[!POZNÁMKA]

Při použití u proměnné deklarované také s klíčovým slovem volatile (C++), má slovo volatile přednost.

Příklad

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

Viz také

Referenční dokumentace

Klíčová slova jazyka C++