在V8引擎代码中读取v8.h后,我可以找到以下宏。
#define TYPE_CHECK(T, S) \
while (false) { \
*(static_cast<T* volatile*>(0)) = static_cast<S*>(0); \
}
我知道这是检查类型S是否与类型T兼容。在语句中,执行流如何进入while循环? while(false)表示条件始终为false。因此,while循环中的语句永远不会被执行。
因此,宏并不总是可用,是吗?
答案 0 :(得分:7)
因此,宏并不总是可用,是吗?
宏始终可用。目的是产生编译时错误或警告(即一种类型与另一种类型不兼容)。
将它包装在while (false)
中的目的是为了防止代码在运行时执行 - 而对于现代编译器,代码可能永远不会进入最终的二进制文件(优化出来)。
如果您想了解有关此技术的更多信息,请阅读static assertions。