簡體   English   中英

使用size_t的負值切換

[英]switch with a negative value for size_t

如果我有以下代碼段:

size_t num = -1;

switch(num) {
    case -1:
        printf("Minus one!\n");
        break;
    default:
        printf("Not minus one!\n");
}

為什么程序會打印Minus One! num轉換為switch語句中的size_t 是否定義了此行為?

從交換機的C標准:

6.8.4.2 switch語句
...
語義
...
5對控制表達式執行整數提升。 每個case標簽中的常量表達式將轉換為控制表達式的提升類型。 如果轉換后的值與提升的控制表達式的值匹配,則控制將跳轉到匹配的案例標簽后面的語句。

size_t也是標准的無符號類型(6.5.3.4 sizeof運算符,Semantics,4)。

所以,你的-1size_t num = -1;中都被轉換為size_t size_t num = -1; case -1: . 難怪(size_t)-1==(size_t)-1計算結果為true。

是的,這個行為是定義的。 這些值會按照您的預期轉換為size_t 從C99§6.8.4.2/ 5:

對控制表達式執行整數提升。 每個case標簽中的常量表達式將轉換為控制表達式的提升類型。 如果轉換后的值與提升的控制表達式的值匹配,則控制將跳轉到匹配的case標簽后面的語句。

“控制表達式”是在switch關鍵字后出現在括號內的表達式,即在這種情況下為num

因此,case標簽中的-1將轉換為size_tnum的提升類型)。 由於num的值就是那個,所以執行該case語句中的代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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