_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
_wassert
式會在 assert
執行時間測試軟體判斷提示,並產生執行時間成本。
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;
}
規格需求
巨集 | 必要的標頭 |
---|---|
static_assert |
<assert.h> |
使用 /std:c11
編譯。
Windows SDK 10.0.20348.0 (2104 版) 或更新版本。 如需安裝適用于 C11 和 C17 開發的 Windows SDK 的詳細資訊,請參閱 在 Visual Studio 中安裝 C11 和 C17 支援。
另請參閱
_STATIC_ASSERT
宏觀
assert
宏和 _assert
和 _wassert
函式/std
(指定語言標準版本)