簡體   English   中英

編譯器#warning:打印枚舉值

[英]Compiler #warning: print enum value

我想將枚舉值打印為#warning#pragma message 我使用typedef enum而不是#define 'ing 值,因為它使編輯更容易並允許鍵入函數參數和返回值。

打印原因: enum的常量最大值不得超過某個值,但是我無法直接在代碼中檢查該值,因為它的值是自動遞增的: typedef enum {a, b, ... az } mytype_t; . 在此示例中,az 必須小於 [any u_int]。

我試圖根據這篇文章對值進行字符串化,但它僅適用於#define 'd 值。 我嘗試了enum值的變體,但無法打印實際值,只能打印其名稱。

編譯時有沒有辦法打印枚舉值(或常量變量)? 謝謝。

編輯:我使用 Microchips XC8 編譯器(8 位)和 C99。

C 標准沒有提供在預處理器宏或其他編譯時方法中報告枚舉常量值的方法。 但是,可以測試該值是否在所需范圍內。

從 C 2011 開始,您可以使用_Static_assert來測試枚舉常量:

enum { a, b, c, d, e };

_Static_assert(e <= 3, "Enumeration constant exceeds 3.");

在 C 2011 之前,您可以通過多種方式混合測試,例如:

enum { a, b, c, d, e };

int FailIfSizeMismatches[1];      // Define array with good size.
int FailIfSizeMismatches[e <= 3]; // Define with conflicting size if test fails.

(在 C++ 中,將_Static_assert替換為static_assert 。)

正如Frankie_C 寫的評論,你必須對預處理和處理進行分類。 枚舉在預處理后評估,而#define、#pragma、#warning 在預處理后評估

暫無
暫無

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

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