簡體   English   中英

如何驗證從文件讀取的枚舉值?

[英]How do I validate an enum value read from a file?

如果我從C中的文件讀取二進制值,那么可以通過循環遍歷枚舉本身並驗證整數是其中一個值來手動檢查應該是枚舉成員的整數,但這看起來像一個有點乏味的過程。 如果我只是將讀取值轉換為枚舉,那么我假設如果值無效將發生某種運行時錯誤。

有沒有比使用手動檢查循環更好的驗證枚舉的方法?

請注意,在我的情況下,所討論的枚舉不一定具有連續值,因此最小/最大檢查不是解決方案。

在C中,所有enum實際上都是整數類型。

因此,該整數類型的任何值都是enum的有效值。

如果你小心並設置enum標簽使它們是連續的(默認值是從0開始連續),那么檢查文件中的值是否在該范圍內是一個簡單的例子。 否則,是的,這很乏味。

C中的enum就像一個整數,所以它可以通過任何類型的讀取函數強制轉換為任何值,或者直接從整數類型轉換它。

如果枚舉只有連續值,則某些程序的枚舉值為max枚舉值。 它們可以具有顯式值,也可以具有始終從0開始並按順序上升的隱式值。 這樣他們就可以檢查值是否在允許的范圍內(0到max - 1 ),而不是檢查每個允許的值。

typedef enum foo { 
    foo_a,
    foo_b,
    foo_c,
    foo_max //last
} foo;
int main(void)
{
    foo x = (foo)88; // from somewhere
    if (x >= 0 && x < foo_max)
        printf("valid\n");
    else printf("invalid\n");
}

暫無
暫無

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

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