我一直在思考的方式来验证类型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