#define RUN_SOME_STUFF(...) { \ int x = 0; \ printf("[INFO] Do some stuff here ... %d\n",++x); \ {__VA_ARGS__} \ printf("[INFO] end some stuff here\n"); \ }
我是如何使用它的:
...RUN_SOME_STUFF({ // mIDdle: int y; y = 100; printf("MIDdle\n"); });...
现在,我知道这被认为是一个(非常)丑陋的宏,但这是我寻求帮助的主要原因.
第一个问题是,如果出现任何类型的错误,编译器将显示宏的最后一行,作为不正确的行.打印只是简化问题的示例(在两个代码片段中),因此可能有20行复杂的嵌套代码,在这种情况下非常烦人.
第二个是__liNE__以相同的错误方式解决
&安培;我相信还有更多……
1.有没有办法纠正上述问题,以便正确解决这些问题? (可能是某种编译器选项?,我正在使用VS2008 / 2010)
2.如果没有办法以“可爱”的方式使用宏,我还有其他选择吗?简单地说,我只想在其他代码“周围”(之前和之后)运行一些代码.
编辑:我会经常使用这个宏,总是使用不同的“中间”内容,所以我不能每次都写一个内联函数.
解决方法 您可以将宏拆分为两部分.不漂亮,但它在宏配对时有效. RUN_BEGIN以下;和RUN_END;写的是他们需要一个分号.#define RUN_BEGIN \ do { \ int x = 0; \ printf("[INFO] Do some stuff here ... %d\n",++x); \ { \ (voID)0#define RUN_END \ } \ printf("[INFO] end some stuff here: %d\n",x ); \ } while (0)总结
以上是内存溢出为你收集整理的宏问题,有多个语句全部内容,希望文章能够帮你解决宏问题,有多个语句所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)