Sdílet prostřednictvím


__restrict

__declspec Podobně jako modifikátor __restrict ( restrict ) označuje klíčové slovo (dvě úvodní podtržítka _), že symbol není aliasovaný v aktuálním oboru. Klíčové __restrict slovo se liší od modifikátoru __declspec (restrict) následujícími způsoby:

  • Klíčové __restrict slovo je platné pouze u proměnných a __declspec (restrict) je platné pouze u deklarací a definic funkcí.

  • __restrictje podobný jazyku restrict C počínaje jazykem C99 a je k dispozici v režimu nebo /std:c17 v /std:c11 režimu, ale __restrict lze ho použít v programech C++ i C.

  • Při __restrict použití kompilátor nerozšíří vlastnost bez aliasu proměnné. To znamená, že pokud přiřadíte proměnnou __restrict jiné proměnné__restrict , kompilátor stále umožní aliasovat proměnnou, která není __restrict. To se liší od chování klíčového slova jazyka restrict C99 C.

Obecně platí, že pokud chcete ovlivnit chování celé funkce, použijte __declspec (restrict) místo klíčového slova klíčové slovo.

Kvůli kompatibilitě s předchozími verzemi _restrict je synonymem, pokud __restrict není zadána možnost /Za kompilátoru (Zakázat jazyková rozšíření ).

V sadě Visual Studio 2015 a novějších __restrict můžete použít odkazy na jazyk C++.

Poznámka

Při použití u proměnné, která má také volatile klíčové slovo, volatile bude mít 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é

Klíčová slova