鍋あり谷あり

テーマを決めずに適当に書いています。

私の知らないC/C++

このシリーズ久々のような。
というわけで、ソースコードから:

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。古いか。

#交点の問題は、そのうち書こうと思ってるけど来年かも。

*1:Cとしてコンパイル

*2:CとしてコンパイルANSI標準

*3:C++としてコンパイル

*4:C++としてコンパイルANSI標準