ZigとかRustみたいに式の中でbreak
とかcontinue
するマクロ
#define break ({ break; 0; })
#define continue ({ continue; 0; })
void test() {
for (;;) {
int a = break;
// unreachable
}
for (int i = 0; i < 5; i++) {
if (continue) {}
// unreachable
}
}
nullチェックみたいな使い方ができる
#define break ({ break; (void *)0; })
#define continue ({ continue; (void *)0 })
#define orelse ?:
void test() {
for (...) {
char *p = malloc(100) orelse break;
...
}
}
いちおう文としても書ける
#define break ({ break; 0; })
void test() {
for (;;) {
break;
}
}
return
は括弧が必要になる(ださい)
#define return(x) ({ return x; (void *)0; })
#define orelse ?:
int test() {
char *p = malloc(100) orelse return(1);
...
}