【发布时间】:2009-12-15 18:18:17
【问题描述】:
为了避免与 winsock2.h 冲突,我想用 WIN32_LEAN_AND_MEAN 包装我的 windows.h 包含(我在 windows.h 之后取消它,以免干扰包含我的标头的应用程序)。当 winsock2.h 不包括在内时,这样做会导致 timeval 未定义。包括 time.h 也没有定义 timeval。
我如何才能定义 timeval (a) 无需包含 winsock2.h,(b) 不要求包含我的标头的应用程序在我的标头之前包含 winsock2.h,(c) 允许应用程序包含 winsock2.h,如果他们需要它们,并且 (d) 不必自己定义 timeval,因为它可能已经由父应用程序包含的标头定义?
【问题讨论】:
-
你不能在包含 windows.h 之后简单地取消它,因为你已经改变了以后重新包含它的行为(考虑包含警卫或 pragma 一次)。理想情况下,WIN32_LEAN_AND_MEAN(和其他此类“标头配置”宏)应该是项目范围的设置;但除此之外,您仍然必须在整个翻译单元中始终如一地使用它们。 (反例:标准 NDEBUG 宏被定义为允许更改,因此 assert.h/cassert 的行为与其他头文件非常不同,并且经常造成混淆。许多项目因此避免使用它并使用自定义 DEBUG 宏。)跨度>
标签: c++ windows winsock timeval