実装依存
GCC 拡張の単項 && でラベルのアドレスが取れる。
#include <stdio.h> int f(void (*k)(void)) { printf("Hello "); k(); printf("Earth!\n"); return 0; } int g(void (*k)(void)) { printf("Nice "); k(); printf("Boat!\n"); return 0; } int h(void) { while (f(&&k) && g(&&k)) ; k: printf("World!\n"); return 1; } int main(void) { h(); }
これがどう動くか予想するのは難しい環境もあるし、簡単な環境もあるでしょう。僕の予想は外れました。あちゃー。