__restrict
就如同 restrict __declspec 修飾詞一樣,__restrict 關鍵字會指出符號在目前範圍中沒有別名。 __restrict 關鍵字與 restrict __declspec 修飾詞具有下列差異:
__restrict 關鍵字只對變數有效,而 __declspec(restrict) 只對函式宣告和定義有效。
使用 __restrict 時,編譯器將不會傳播變數的無別名屬性。 也就是說,如果您將 __restrict 變數指派至非 __restrict 變數,編譯器將不會表示非 __restrict 變數沒有別名。 這種行為與 C99 規格中 restrict 關鍵字的行為不同。
一般而言,如果您要影響整個函式的行為,使用 __declspec 的效果會比使用關鍵字更好。
__restrict 類似於 C99 規格中的 restrict,不過 __restrict 可以在 C++ 或 C 程式中使用。
C++ 參考上不支援 __restrict。
注意事項 |
---|
若是在同時擁有 volatile (C++) 關鍵字的變數上使用,則 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;
};