我一直在思考的方式來驗證類型C宏,到目前爲止,我想出最好的辦法是這樣的:如何在C宏驗證類型
#define ASSERT_PTYPE(TYPE, VALUE) (0 && (*(int (*)(TYPE*))0)(VALUE))
這顯然需要一個類型名稱和指向該類型的指針。類似的ASSERT_TYPE宏也可以被創建。這似乎與海灣合作委員會工作得很好。它甚至在類型不匹配的情況下給出非常有用的錯誤消息。問題是,我不完全確定這是有效的C還是此事的最佳方式。
據我所知,標準說你可以投一個函數指針,但調用該函數指針的結果是未定義的。在這種情況下,在運行時調用函數是不可能的。這是否足夠好或者標準是否意味着您甚至無法編寫無法調用的調用cast函數的代碼?
不錯的問題,這裏是一個可能的C++對應http://stackoverflow.com/questions/5237163/how-does-the-following-code-work – JoeSlav 2011-03-18 09:01:06
問題是...什麼樣的情況存在於C程序員的地方不知道傳遞給該宏的類型?代碼有什麼用處?此外,這些解決了與C語言中的許多隱式類型轉換相關的任何問題。就C而言,例如,有符號和無符號是兼容的。 – Lundin 2011-03-18 12:43:10