_Static_assert anahtar sözcük ve static_assert makro (C11)

Derleme zamanında onayları sınar. Belirtilen sabit ifade ise false, derleyici belirtilen iletiyi görüntüler ve derleme C2338 hatasıyla başarısız olur; aksi takdirde hiçbir etkisi olmaz. C11'de yeni.

_Static_assert , C11'de tanıtılan bir anahtar sözcüktür. static_assert , C11'de kullanıma sunulan ve anahtar sözcükle eşleyen _Static_assert bir makrodur.

Sözdizimi

_Static_assert(constant-expression, string-literal);
static_assert(constant-expression, string-literal);

Parametreler

constant-expression
Derleme zamanında değerlendirilebilecek bir tamsayı sabit ifadesi. İfade sıfır (false) ise parametresini string-literal görüntüler ve derleme bir hatayla başarısız olur. İfade sıfır olmayan (true) ise hiçbir etkisi yoktur.

string-literal
Sıfır (false) olarak değerlendirilirse constant-expression görüntülenen ileti. İleti, derleyicinin temel karakter kümesi kullanılarak yapılmalıdır. Karakterler çok baytlı veya geniş karakter olamaz.

Açıklamalar

Hem _Static_assert anahtar sözcüğü hem static_assert de makro, derleme zamanında bir yazılım onayını test edin. Genel veya işlev kapsamında kullanılabilirler.

Buna karşılık, assert makro ve _assert işlevler _wassert bir yazılım onayını çalışma zamanında test edip çalışma zamanı maliyetine neden olur.

Microsoft'a özgü davranış

C'de, eklemediğinizde <assert.h>Microsoft derleyicisi ile eşleyen static_assertbir anahtar sözcük olarak davranır_Static_assert. Aynı kod hem C hem de C++'da çalışacağından kullanmak static_assert tercih edilir.

Derleme zamanı onayı örneği

Aşağıdaki örnekte ve static_assert_Static_assert bir numaralandırmada kaç öğe olduğunu ve tamsayıların 32 bit genişliğinde olduğunu doğrulamak için kullanılır.

// requires /std:c11 or later
#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;
}

Gereksinimler

Makro Gerekli başlık
static_assert <assert.h>

ile derleyin /std:c11.

Windows SDK 10.0.20348.0 (sürüm 2104) veya üzeri. C11 ve C17 geliştirmesi için Windows SDK'sını yükleme hakkında daha fazla bilgi için bkz . Visual Studio'da C11 ve C17 desteğini yükleme.

Ayrıca bkz.

_STATIC_ASSERT Makro
assert makro ve _assert_wassert işlevler
/std (Dil standart sürümünü belirtin)