static 関数を extern "C"2013年02月23日 12時33分49秒

C++ はとても複雑だ。新しいことを見つける度に思う。 AIX の C++ コンパイラには -qlanglvl=staticstoreoverlinkage というオプションがある。 具体的に示すと、

extern "C" static void func(void*);

は文法的に間違った記述なのだそうだ。

extern "C"
{
    static void func(void*);
}

が由緒正しき記述なのだそうである。 注意しないと行けない点は、この関数が static なこと。この static が無い、extern "C" void func(void*); は正しい記述だ。

数々の本を漁っても extern "C" に触れているのがあればいい方で、その正しき文法の詳細を記述した本を見たことは無い。