GCC 4.8.4でコンパイルしたコードがあります。私は最近システムをアップグレードしてGCC 5.2.1を持っていますが、互換性のないポインタ型についての警告を受けています。私は、エラーを再現する小さな例に問題点を抽出しました:実際のコード、typedefで、関数定義、および型キャストでGCC互換性のないポインタ型(typedefを使用)
typedef const double ConstSpiceDouble;
void foo(const double (*)[3]);
int main(int argc, char **argv) {
double a[3][3] = {{1,2,3},{1,2,3},{1,2,3}};
foo((ConstSpiceDouble (*)[3])a);
return 0;
}
がそうでなければ私のコントロール外の図書館にいる私がするのと同じキャストとその機能を修正してください。ここで私は、コンパイラから取得するメッセージだ:二つのタイプが同一であることを認めているようですので、GCCから
$ gcc -Werror -c test.c
test.c: In function ‘main’:
test.c:9:7: error: passing argument 1 of ‘foo’ from incompatible pointer type [-Werror=incompatible-pointer-types]
foo((ConstSpiceDouble (*)[3])a);
^
test.c:4:6: note: expected ‘const double (*)[3]’ but argument is of type ‘const ConstSpiceDouble (*)[3] {aka const double (*)[3]}’
void foo(const double (*)[3]);
^
cc1: all warnings being treated as errors
ノートは特に厄介である、まだそれはとにかく文句を言います。
[GCC 5.2.0](http://coliru.stacked-crooked.com/a/f7768e128db5462b)(およびClang 3.7.0も)にヒッチなしでコンパイルします。私はコンパイラのバグに傾いています。 – Quentin
これは5.2.0でコンパイルされていることを知っておいて、バージョンの可能性を5.2.1に制限しています。 – Gravatite
「5.2.1」と言ったらどういう意味ですか?このバージョンでは、まだ正式にはリリースされていない: ''のsvn:URL 'のsvn://gcc.gnu.org/svn/gcc/tags/gcc_5_2_1_releaseは' –