我有以下宏
#define FIRST(first) \
switch(first, 0) default:
#define LAST(last) \
switch(0) for(;0;last) default:
#define BRACKET(first, last) \
switch(first, 0) for(;0;last) default:
它们是这样使用的。
#include <stdio.h>
// ... Macros are defined here
int main (int argc, const char * argv[])
{
int x;
FIRST(x = 4)
{
printf("%i\n", x);
}
LAST(++x)
{
printf("%i\n", x);
}
printf("%i\n", x);
return 0;
}
BRACKET 只是 FIRST 和 LAST 的组合。不过,FIRST 宏(和 BRACKET 宏)还不够好。我希望能够编写以下代码,其中 y 的范围为花括号。
FIRST(int y = 0)
{
printf("%i\n", y);
}
如何使用 C 编程语言编写 FIRST 宏,让我声明一个作用域在花括号内的变量?
一些极端情况是:
我希望允许以下代码片段
FIRST(int x = 0)
printf("%i\n", x);
我希望禁止使用以下代码片段
FIRST(int x = 0)
printf("%i\n", x);
++x;
printf("%i\n", x);
PS 我很惊讶编译器接受了“switch(0) for(;0;last) default:”,这真的是合法的 C 代码吗?