このシリーズ久々のような。
というわけで、ソースコードから:
struct orange; /* これは、何度も書いたことがある*/ typedef orange;/* C の場合は、typedef int orange と同義 */ typedef struct kiwi; extern struct grape; extern grape;/* C の場合は、int型のgrape */ extern melon;/* C の場合は、extern int melon と同義 */ enum plum; extern enum plum; int; extern; static; auto; void foo() { auto; auto int; auto struct guarana; auto guarana;/* C の場合は、int型のguarana */ }
さて。
Cとしてコンパイルした場合、C++としてコンパイルした場合、どこでエラーになるのが正しいか。
これがわかる人は、かなりC / C++ に詳しいと思う。
私にはわからなかったというか未だにわからない。
cl /TC*1だと、エラーなし。全部通る。
gcc -x c -ansi*2でも、エラーなし。
cl /TP*3 でコンパイルすると、「extern melon;」以外はエラーなし。
gcc -x c++ -ansi*4だと、たくさんエラーが出て、「struct orange; 」「typedef struct kiwi;」「auto;」以外は全部エラー。
意外なのは、「extern;」はエラーなのに、関数内の「auto;」がエラーじゃないところ。同じじゃないのか。
ちなみに、clは 14.00.50727.762 で、gccは3.3.3。古いか。
#交点の問題は、そのうち書こうと思ってるけど来年かも。