c/c++语言开发共享C Macro保护定义

有没有办法保护宏定义? 更具体地考虑以下内容:

#define macro1 x // code segment 1 involving macro1 goes here // code segment 2 involving macro1 goes here // code segment 3 involving macro1 goes here 

在示例中,我放置了3条注释,表示涉及宏的代码段。 我现在想做的是能够避免宏影响代码段2.有没有办法告诉编译器替换段1和段3中的所有macro1实例而不是段2中的宏实例? 这是一种可能的方式:

 #define macro1 x // code segment 1 involving macro1 goes here #undef macro1 // code segment 2 involving macro1 goes here #define macro1 x // code segment 3 involving macro1 goes here 

缺点是我必须再次定义宏。 说我想在我的程序中使用NULL这个词(不要问我为什么要用它)。 我希望这是一个变量,但在大多数情况下,C预处理器会将其更改为0。 所以我想做的是,能够在短时间内阻止它,然后让它成为以前的样子。

尝试失败:

让我们假设macro1已在外部定义,我们甚至不知道这个宏的值是什么。 我们想要的只是避免让它替换第二段中的东西。

 // code segment 1 involving macro1 goes here #ifdef macro1 #define TEMP macro1 #undef macro1 #endif // code segment 2 involving macro1 goes here #ifdef TEMP #define macro1 TEMP #undef TEMP #endif // code segment 3 involving macro1 goes here 

我们的想法是检查宏是否存在,如果存在,那么我们希望将值存储到另一个变量中,取消定义宏,最后在需要时再次定义宏。 不幸的是,这段代码不起作用,因为在我们执行代码段3之前,macro1将被TEMP替换,而不是TEMP应该拥有的值。

    让一大块代码不受宏影响的最简单方法是将宏放在头.h文件中,而不是将头文件包含在正在编译的源文件中。

    这意味着您可能必须“删除”一个更大的文件,以获得不应受宏影响的代码段。 是的,这是一个痛苦,但听起来它不应该与代码的其余部分(或它不会是一个问题)。

    GCC和MSVC允许您使用pragma来推送和弹出宏定义:

      #define X 1 #pragma push_macro("X") #undef X #define X -1 #pragma pop_macro("X") int x [X]; 

      以上就是c/c++开发分享C Macro保护定义相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/523103.html

      (0)
      上一篇 2020年12月11日
      下一篇 2020年12月11日

      精彩推荐