_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)
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk