Bagikan melalui


_Static_assert kata kunci dan static_assert makro (C11)

Menguji pernyataan pada waktu kompilasi. Jika ekspresi konstan yang ditentukan adalah false, kompilator menampilkan pesan yang ditentukan dan kompilasi gagal dengan kesalahan C2338; jika tidak, tidak ada efek. Baru di C11.

_Static_assert adalah kata kunci yang diperkenalkan di C11. static_assert adalah makro, diperkenalkan di C11, yang memetakan ke kata kunci _Static_assert.

Sintaks

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

Parameter

constant-expression
Ekspresi konstanta integral yang dapat dievaluasi pada waktu kompilasi. Jika ekspresinya nol (false), menampilkan parameter string-literal dan kompilasi gagal dengan kesalahan. Jika ekspresinya bukan nol (true), maka tidak ada efek.

string-literal
Pesan ditampilkan jika constant-expression bernilai nol (false). Pesan harus dibuat menggunakan kumpulan karakter dasar kompilator. Karakter tidak boleh karakter multibyte atau lebar.

Keterangan

Kata kunci _Static_assert, dan makro static_assert, keduanya menguji pernyataan perangkat lunak pada waktu kompilasi. Mereka dapat digunakan pada lingkup global atau fungsi.

Sebaliknya, assert fungsi makro dan _assert dan _wassert menguji pernyataan perangkat lunak pada waktu proses dan menimbulkan biaya waktu proses.

Perilaku khusus Microsoft

Jika di C Anda tidak menyertakan <assert.h>, kompiler Microsoft memperlakukan static_assert sebagai kata kunci yang membuat pemetaan ke _Static_assert. Menggunakan static_assert lebih disukai karena kode yang sama akan berfungsi di C dan C++.

Contoh pernyataan waktu kompilasi

Dalam contoh berikut, static_assert dan _Static_assert digunakan untuk memverifikasi berapa banyak elemen dalam enum dan bahwa bilangan bulat memiliki lebar 32 bit.

// 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;
}

Persyaratan

Makro Header yang diperlukan
static_assert <assert.h>

Kompilasikan dengan /std:c11.

Windows SDK 10.0.20348.0 (versi 2104) atau yang lebih baru. Untuk informasi selengkapnya tentang menginstal Windows SDK untuk pengembangan C11 dan C17, lihat Menginstal dukungan C11 dan C17 di Visual Studio.

Lihat juga

_STATIC_ASSERT Makro
assert fungsi makro dan _assert dan _wassert/std (Tentukan versi standar bahasa)