共用方式為


safebuffers

Microsoft 特定的

告知編譯器不要插入函式的緩衝區滿溢安全性檢查。

語法

__declspec( safebuffers )

備註

/GS 編譯程式選項會藉由在堆棧上插入安全性檢查,讓編譯程式測試緩衝區滿溢。 符合安全性檢查資格的數據結構類型會在 /GS(緩衝區安全性檢查)說明。 如需緩衝區滿溢偵測的詳細資訊,請參閱 MSVC 中的安全性功能。

某位專業人員手動檢閱程式碼或進行外部分析後,可能會判斷函式不會發生緩衝區滿溢。 在此情況下,您可以將 關鍵詞套用 __declspec(safebuffers) 至函式宣告,以隱藏函式的安全性檢查。

警告

緩衝區安全性檢查提供了重要的安全性保護,且幾乎不會對效能造成影響。 因此,除了在少數函式的效能為重要考量,以及函式已知為安全的情況以外,建議您不要抑制這些檢查。

內嵌函式

主要函式可以使用內嵌關鍵詞來插入次要函式的複本。 __declspec(safebuffers)如果關鍵詞套用至函式,則會隱藏該函式的緩衝區滿溢偵測。 不過,內嵌會以下列方式影響 __declspec(safebuffers) 關鍵詞。

假設兩個函式都指定了 /GS 編譯程序選項,但主要函式會__declspec(safebuffers)指定 關鍵詞。 第二個函式中的資料結構會使其進行安全性檢查,因此函式不會抑制這些檢查。 在此案例中:

  • 指定 次要函式上的 __forceinline 關鍵詞,以強制編譯程式內嵌該函式,而不論編譯程式優化為何。

  • 因為次要函式符合安全性檢查資格,所以即使它指定 __declspec(safebuffers) 關鍵詞,安全性檢查也會套用至主要函式。

範例

下列程式代碼示範如何使用 __declspec(safebuffers) 關鍵詞。

// compile with: /c /GS
typedef struct {
    int x[20];
} BUFFER;
static int checkBuffers() {
    BUFFER cb;
    // Use the buffer...
    return 0;
}
static __declspec(safebuffers)
    int noCheckBuffers() {
    BUFFER ncb;
    // Use the buffer...
    return 0;
}
int wmain() {
    checkBuffers();
    noCheckBuffers();
    return 0;
}

END Microsoft 特定的

另請參閱

__declspec
關鍵字
inline、__inline、__forceinline
strict_gs_check