実装依存

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();
}

これがどう動くか予想するのは難しい環境もあるし、簡単な環境もあるでしょう。僕の予想は外れました。あちゃー。