【发布时间】:2017-11-24 08:57:16
【问题描述】:
我正在编写一些基于几何的代码。手头的任务涉及使用边界框来包含实体样本。现在,在代码中,我设计了两种不同类型的此类框,即INNER_BOUNDING_BOX 和OUTER_BOUNDING_BOX。该代码进一步期望使用两个盒子中的任何一个,但不能同时使用两者。我试图通过使用预处理器来实现它。
我已经基于几个宏编写了进一步的代码,即USE_INNER_BOUNDING_BOX 和USE_OUTER_BOUNDING_BOX。我可以确保任何时候任何一个宏都是通过一些简单的结构来定义的:
#if defined(USE_INNER_BOUNDING_BOX) && defined(USE_OUTER_BOUNDING_BOX)
#undef USE_INNER_BOUNDING_BOX
#undef USE_OUTER_BOUNDING_BOX
#define USE_INNER_BOUNDING_BOX
#endif
#ifndef USE_INNER_BOUNDING_BOX
#ifndef USE_OUTER_BOUNDING_BOX
#define USE_INNER_BOUNDING_BOX
#endif
#endif
现在,如果我想使用任何特定的框,我可以定义相应的宏。困难在于想要使用默认设置宏 USE_DEFAULT_BOUNDING_BOX,然后我可以使用它来为 USE_INNER_BOUNDING_BOX 或 USE_OUTER_BOUNDING_BOX 中的任何一个设置定义,当它们都被明确定义或都没有被明确定义时。
我倾向于可移植代码,但编译器特定的技巧也可以通过。我正在使用Visual Studio 2012。
【问题讨论】:
-
不是你所问问题的真正答案,但你为什么不将单个开关
BOUNDING_BOX_TO_USE定义为INNER == 1OUTER == 2?这样一来,它就不可能两者兼而有之。 -
我可以写一些类似的东西。那个时候我并没有触动。 :) 我可能会尝试以不同的方式实现它。但是,这仍然是一个偶然的问题,而且很有趣,所以我问了。 :)
-
这些宏块已经完全按照您的意愿行事:当两个宏都被定义或都没有定义时,定义其中一个宏。不过它可能会更短。
标签: c visual-studio-2012 c-preprocessor