私は次のマクロを持っています
#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 コードですか?