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

宏问题,有多个语句

发布时间:2020-12-16 07:28:10 所属栏目:百科 来源:网络整理
导读:#define RUN_SOME_STUFF(...) { int x = 0; printf("[INFO] Do some stuff here ... %dn",++x); {__VA_ARGS__} printf("[INFO] end some stuff heren"); } 我是如何使用它的: ...RUN_SOME_STUFF({ // middle: int y; y = 100; printf("Middlen
#define RUN_SOME_STUFF(...) {                                        
            int x = 0;                                               
            printf("[INFO] Do some stuff here ... %dn",++x);       
            {__VA_ARGS__}                                            
            printf("[INFO] end some stuff heren");                  
        }

我是如何使用它的:

...
RUN_SOME_STUFF(
{
    // middle:
    int y;
    y = 100;
    printf("Middlen"); 
});
...

现在,我知道这被认为是一个(非常)丑陋的宏,但这是我寻求帮助的主要原因.

第一个问题是,如果出现任何类型的错误,编译器将显示宏的最后一行,作为不正确的行.打印只是简化问题的示例(在两个代码片段中),因此可能有20行复杂的嵌套代码,在这种情况下非常烦人.

第二个是__LINE__以相同的错误方式解决

&安培;我相信还有更多……

1.有没有办法纠正上述问题,以便正确解决这些问题? (可能是某种编译器选项?,我正在使用VS2008 / 2010)

2.如果没有办法以“可爱”的方式使用宏,我还有其他选择吗?简单地说,我只想在其他代码“周围”(之前和之后)运行一些代码.

编辑:我会经常使用这个宏,总是使用不同的“中间”内容,所以我不能每次都写一个内联函数.

解决方法

您可以将宏拆分为两部分.不漂亮,但它在宏配对时有效. RUN_BEGIN以下;和RUN_END;写的是他们需要一个分号.

#define RUN_BEGIN 
    do { 
        int x = 0;   
        printf("[INFO] Do some stuff here ... %dn",++x);  
        {  
            (void)0

#define RUN_END  
        } 
        printf("[INFO] end some stuff here: %dn",x ); 
    } while (0)

(编辑:李大同)

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

    推荐文章
      热点阅读