簡體   English   中英

這個單行的宏函數'static_assert'做什么用的?

[英]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):
  1. 這是如何執行斷言的?
  2. 為什么不直接使用常規的assert()函數?

這通過觸發編譯時錯誤來執行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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM