__restrict

__declspec ( restrict ) 한정자와 __restrict 마찬가지로 키워드(keyword)(두 개의 선행 밑줄 '_')은 기호가 현재 범위에서 별칭이 지정되지 않음을 나타냅니다. __restrict 키워드(keyword) 다음과 같은 방법으로 한정자와 다릅니다__declspec (restrict).

  • __restrict 키워드(keyword) 변수에서만 유효하며 __declspec (restrict) 함수 선언 및 정의에서만 유효합니다.

  • __restrict는 C99부터 시작하여 모드에서/std:c17사용할 수/std:c11있는 C와 유사 restrict 하지만 __restrict C++ 및 C 프로그램 모두에서 사용할 수 있습니다.

  • 사용하는 경우 __restrict 컴파일러는 변수의 별칭 없음 속성을 전파하지 않습니다. 즉, 변수를 __restrict 변수__restrict 가 아닌 변수에 할당하는 경우 컴파일러는 __restrict 아닌 변수의 별칭을 계속 허용합니다. 이는 C99 C 언어 restrict 키워드(keyword) 동작과 다릅니다.

일반적으로 전체 함수의 동작에 영향을 주려면 키워드(keyword) 대신 사용합니다__declspec (restrict).

이전 버전 _restrict 과의 호환성을 위해 __restrict 컴파일러 옵션 /Za (언어 확장 사용 안 함) 을 지정하지 않는 한 동의어입니다.

Visual Studio 2015 이상 __restrict 에서는 C++ 참조에서 사용할 수 있습니다.

참고 항목

또한 키워드(keyword) volatile 있는 변수에서 volatile 사용되는 경우 우선합니다.

예시

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

참고 항목

키워드