以下预处理器宏:
#define _VARIANT_BOOL /##/
实际上不是有效的C;粗略地说,原因是预处理器被定义为处理令牌流,而上面假设它处理字符流。
另一方面,不幸的是,上述情况实际上发生在 Microsoft 头文件中,所以无论如何我都必须处理它。(我正在研究预处理器实现。)
人们在野外遇到了哪些其他情况,无论是遗留代码,只要该代码可能仍在使用中,预处理器宏实际上是无效的,但仍然可以工作,因为它们是在使用字符的编译器下编写的面向预处理器的实现?
(基本原理:如果我编写了一个适当的、符合标准的、面向令牌的正确干净的实现,我试图提前了解我将不得不破解多少特殊情况。)