[英]What does this one-line, macro function, 'static_assert' do?
這是我找到的代碼
static_assert(sizeof(struct File) == 256);
宏的定義是這樣的:
#define static_assert(x) switch (x) case 0: case (x):
這通過觸發編譯時錯誤來執行assert
。 考慮以下代碼:
switch(0) case 0: case 0:
編譯器會告訴您,您有一個重復的case
標簽,因為零被列出兩次。 另一方面,如果你將x
以外的任何數字代替x
,你就會得到
switch(1) case 0: case 1:
這是完全合法的,不會觸發編譯時錯誤。
與在運行時發生的常規assert
不同,此斷言發生在編譯時。 換句話說,如果常規斷言是錯誤的,程序將崩潰; 如果這個斷言是假的,那么程序甚至都不會編譯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.