共用方式為


_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_assertstatic_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 支援。

另請參閱

_STATIC_ASSERT 巨集
assert巨集與函_assert_wassert/std (指定語言標準版本)