私はコンパイルに打ち鳴らす3.8.1を使用する場合:clang ++はいくつかの廃止予定の警告に対してextern "C"を無視していますか?
a.cpp:3:18: warning: 'register' storage class specifier is deprecated and incompatible with C++1z [-Wdeprecated-register]
int foo(int x) { register int y = x; return y; }
^~~~~~~~~
...内側の関数はCのコードであるので、私は本当に、取得すべきではありません。
extern "C" {
int foo(int x) { register int y = x; return y; }
}
int main() { return foo(123); }
を私が警告を受けます。 -Wall
でGCC 6.3.1を使用しても、私はこの警告を受け取りません。
これはクラッグバグですか、何か間違っていますか?
これはCとは関係ありません! – Olaf
コードはまだC++コードです! 'extern" C "'はABIと命名規則を指定するだけです。 (警告を読んだことがありますか?) – Olaf
'extern" C "'は外部名のリンケージにのみ影響します。コンパイラを 'Cモード'に変更しません。 –