问我正在使用两个不同的第三方库附带的头文件,它们“很友好地”定义了公共宏,例如:TRUE, FALSE, Min(),而Max(),但它们的定义相互冲突,也与我自己在头文件中已建立的定义冲突。我该怎么办?
答这确实是一个恼人的情况。这是一个经典的命名空间问题;请参阅第 1.9 题和第 1.29 题。理想情况下,第三方供应商在定义符号(包括预处理器#define宏和全局变量及函数名)时会尽职尽责,以确保命名空间冲突的可能性不大。最佳解决方案是让供应商修复他们的头文件。
作为一种变通方法,您有时可以在冲突的#include指令之间取消定义或重新定义有问题的宏。