加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 在功能之外吞下分号的宏

发布时间:2020-12-16 05:55:41 所属栏目:百科 来源:网络整理
导读:有没有一个成语在功能之外的cpp宏之后强制分号? 函数内部使用的宏的已知解决方案是: #define MACRO(x) do { x * 2; } while(0) 不过说我有一个如下所示的宏: #define DETAIL(warning) _Pragma(#warning)#define WARNING_DISABLE(warning) DETAIL(GCC di
有没有一个成语在功能之外的cpp宏之后强制分号?

函数内部使用的宏的已知解决方案是:

#define MACRO(x) 
  do {
    x * 2;
  } while(0)

不过说我有一个如下所示的宏:

#define DETAIL(warning) _Pragma(#warning)
#define WARNING_DISABLE(warning) DETAIL(GCC diagnostic ignore warning)

我可以把那个强制在分析结束之后的分号放在宏中.该声明可以在函数中或外部使用:

WARNING_DISABLE("-Wunused-local-typedefs")
#include "boost/filesystem.hpp"
void foo(const int x) {
    WARNING_DISABLE("-Wsome-warning")
    ...
}

是否有任何C/C++语法将强制分析器中的分号在文件中的任何一点没有副作用?

编辑:可能的用例:

#define MY_CPPUNIT_TEST_SUITE(test_suite_class) 
  WARNING_PUSH 
  /* the declaration of the copy assignment operator has been suppressed */ 
  INTEL_WARNING_DISABLE(2268) 
  /* the declaration of the copy assignment operator has been suppressed */ 
  INTEL_WARNING_DISABLE(2270) 
  /* the declaration of the copy constructor operator has been suppressed */ 
  INTEL_WARNING_DISABLE(2273) 
  CPPUNIT_TEST_SUITE(test_suite_class); 
  WARNING_POP 
  /* force a semi-colon */ 
  UDP_KEYSTONE_DLL_LOCAL struct __udp_keystone_cppunit_test_suite ## __LINE__ {}

解决方法

#define DETAIL(warning) _Pragma(#warning) struct X ## __LINE__ {}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读