2017-03-01 184 views
0

我不是宏嚮導,我想知道是否有一種與_Generic宏根據常量評估函數的方法。截至目前我的宏是以下內容:數字常量之前的預期說明符 - 限定符列表

#define getData(data) _Generic((data), 1: printone, default: printdefault)(data) 

如果在C中無法做到這一點,歡迎提出其他建議!我不認爲這是必要的,但如果需要更多的代碼來回答這個問題,那麼我會很樂意提供它。

謝謝!

回答

0

這是不可能的。通用關聯的左側必須由組成,類型或關鍵字默認。

既然你硬編碼的常數,沒有理由不硬編碼,而不是類型:

#define getData(data) _Generic((data), int: printone, default: printdefault)(data) 

常數1將始終具有int類型,但如果你打算使用常數隨較大的值,可能有其他簽名類型,只需將這些類型添加到_Generic選擇。

以下內容將涵蓋使用數字形成的所有可能的帶符號整數常量。換句話說,任何整數常數,即使是大一個,像9223372036854775807將涵蓋:

#define getData(data) _Generic((data), int: printone, 
             long: printonel, 
             long long: printonell, 
             default: printdefault)(data) 

(201X 6.5.1.1通用選擇1.從ISO/IEC 9899的引用) 通用關聯:
       類型名稱:賦值表達式
        defau lt:賦值表達式

+0

非常感謝您的回答!我將嘗試相應地編輯我的代碼! – TheCrifix

相關問題