分享方式:


_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_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 (指定語言標準版本)