如何注释掉多行宏中的代码块?

时间:2019-07-10 13:49:18

标签: syntax macros comments c++builder compiler-warnings

我在C ++中有一个复杂的多行宏代码(可处理某些几何图形并在RT中计算其物理属性),该代码已被多次使用并且无法转换为函数(没有巨大的空间和性能优势)。问题是我有时需要在禁用部分代码(在针对特定任务/机器的编译时)中配置代码,如下所示:

#define some_macro \
 bla;              \
 bla;              \
 if (0)            \
  {                \
  bla;             \
  bla;             \
  bla;             \
  }                \
 bla; 

如您所见,由于宏的重复使用,导致unreachable code警告的倍数。可以使用/* */注释,但由于需要更改每一行代码,因此对于管理此类代码(至少对我而言)非常不利。

我能想到的唯一可行的选择是使用宏,例如:

#define my_disable
#define some_macro  \
 bla;               \
 bla;               \
 #ifndef my_disable \
  bla;              \
  bla;              \
  bla;              \
 #endif             \
 bla; 

#undef my_disable

或以相同的方式使用一些易失性开关变量:

volatile bool on=true;
#define some_macro \
 bla;              \
 bla;              \
 if (on)           \
  {                \
  bla;             \
  bla;             \
  bla;             \
  }                \
 bla; 

我宁愿不丢失多行代码的格式,因为宏至关重要且非常复杂,如果没有宏,它将无法及时读取和管理。将此宏分离为更小的宏也是如此。

是否还有其他选项不需要更改所有代码行或创建基于每个代码块的宏/变量?

另一种可能更容易的解决方案是针对有问题的代码部分关闭警告,而其余代码照常处理警告,但我不知道语法。因此,另一个问题是:

如何仅对部分源代码禁用[C++ Warning] W8066 Unreachable code

我受困于旧的 BDS2006 C ++ 编译器,因此新的语言怪癖无济于事。

1 个答案:

答案 0 :(得分:3)

  

如何仅对部分源代码禁用[C++ Warning] W8066 Unreachable code

您可以使用#pragma warn语句包装代码:

#pragma warn -8066 // disable W8066 warnings
<code>
#pragma warn .8066 // restore W8066 warnings back to default

否则,我建议仅复制宏,注释掉原始宏,然后根据需要修改副本以删除所需的代码。

/*
#define some_macro \
 bla;              \
 bla;              \
 if (0)            \
  {                \
  bla;             \
  bla;             \
  bla;             \
  }                \
 bla; 
*/
#define some_macro \
 bla;              \
 bla;              \
 bla; 

或者,您可以在原始宏中注释掉所需的代码:

#define some_macro \
 bla;              \
 bla;              \
 //if (0)            \
 // {                \
 // bla;             \
 // bla;             \
 // bla;             \
 // }                \
 bla;