_Static_assert
關鍵字和 static_assert
巨集 (C11)
在編譯時期測試判斷提示。 如果指定的常數表示式為 false
,則編譯程式會顯示指定的訊息,編譯失敗並出現錯誤 C2338;否則不會有任何作用。 C11 的新功能。
_Static_assert
是 C11 中引進的關鍵詞。 static_assert
是 C11 中引進的巨集,對應至 _Static_assert
關鍵詞。
語法
_Static_assert(constant-expression, string-literal);
static_assert(constant-expression, string-literal);
參數
constant-expression
可在編譯時期評估的整數常數表達式。 如果表達式為零 (false),則顯示 string-literal
參數,編譯失敗並出現錯誤。 如果表達式為非零值(true),則沒有作用。
string-literal
如果 constant-expression
評估為零時顯示的訊息(false)。 必須使用編譯程式的基底字元集來建立訊息。 字元不能是 多位元組或寬字元。
備註
關鍵詞 _Static_assert
和 static_assert
巨集都會在編譯時期測試軟體判斷提示。 它們可以用於全域或函式範圍。
相反地assert
,巨集和函_assert
_wassert
式會在運行時間測試軟體判斷提示,併產生運行時間成本。
Microsoft特定行為
在 C 中,當您不包含 <assert.h>
時,Microsoft 編譯程式會將 static_assert
視為對應至 _Static_assert
的關鍵詞。 使用 static_assert
是慣用的,因為相同的程式代碼會在 C 和 C++ 中運作。
編譯時間判斷提示的範例
在下列範例中, static_assert
和 _Static_assert
可用來驗證列舉中的元素數目,且整數寬度為32位。
// requires /std:c11 or higher
#include <assert.h>
enum Items
{
A,
B,
C,
LENGTH
};
int main()
{
// _Static_assert is a C11 keyword
_Static_assert(LENGTH == 3, "Expected Items enum to have three elements");
// Preferred: static_assert maps to _Static_assert and is compatible with C++
static_assert(sizeof(int) == 4, "Expecting 32 bit integers");
return 0;
}
需求
Macro | 必要的標頭 |
---|---|
static_assert |
<assert.h> |
使用 /std:c11
編譯。
Windows SDK 10.0.20348.0 (版本 2104) 或更新版本。 如需安裝 Windows SDK for C11 和 C17 開發的詳細資訊,請參閱 在 Visual Studio 中安裝 C11 和 C17 支援。