パズル

次の C99 プログラムを実行すると、何が表示されますか。
(1)

#include <stdio.h>
void f(int x) {
}
void (*g(int x))(int) {
    return f;
}
int main() {
    g(puts("Hello"))(puts("World"));
}

(2)

#include <stdio.h>
int f(int x, int y) {
    if (x > y)
        if (y != 0) return x / y;
    else
        if (x != 0) return y / x;
    return -1;
}
int main() {
    printf("%d", 1 << f(2, 8));
}

(3)

#include <stdio.h>
int main() {
    printf("%d", sizeof(32768) * sizeof(char) == sizeof(0x8000));
}

怒らない人だけ続きを見て下さい。
(1) 不定
(2) 未定義
(3) 処理系定義