考えてみましょう:-Wwrite-strings
とタイプ-Wwrite-文字列を使用して
char f(const char (*x)[4]);
void foo(void) {
typeof(*"FOO") x[4];
f(&x);
}
コンパイル:
gcc-5 -c gcc5.c -Wwrite-strings
あなたが得る:
gcc5.c: In function ‘foo’:
gcc5.c:5:7: warning: passing argument 1 of ‘f’ from incompatible pointer type [-Wincompatible-pointer-types]
f(&x);
^
gcc5.c:1:6: note: expected ‘const char (*)[4]’
but argument is of type ‘const char (*)[4]’
char f(const char (*x)[4]);
^
はバグのように見えます私が何かを逃していない限り、gccで?
注:それは確かにgcc
のバグだ私にとって
文字列を与え、Cをコンパイルするタイプ定数 "のconstのchar [長さ]"
Cでは '*" FOO "の型は' char'です。 '-Wwrite-strings'はこれを変更する(コンパイラを非標準にする)のですか?そうでなければ、バグは '&x'の型を' const char(*)[4] 'として表示しています:' const'はありません。 –
バグのようです。バグレポートを提出することを検討してください。 – fuz
@PascalCuoq:それでも 'char(*)[4]'は 'const char(*)[4]'に変換可能ですか?なぜそれは "互換性のないポインタ型"ですか? –