を持つI次のコードを持っている:問題のtypedefと配列
typedef float vec3_t[3];
void f(const vec3_t v[2]){
// do stuff
}
int main(int argc, char * argv[]){
vec3_t v[2];
v[2][1] = 1;
f(v);
return 0;
}
gcc main.c -std=gnu99 -O0 -o main
を使用してコンパイルしますが、エラーを与えることはありません
main.c: In function ‘main’:'
main.c:293:5: warning: passing argument 1 of ‘f’ from incompatible pointer type [enabled by default]
f(v);
^
main.c:286:6: note: expected ‘const float (*)[3]’ but argument is of type ‘float (*)[3]’
void f(const vec3_t v[2]){
^
の場合一方、関数fのconst要件を削除します。それはすべてうまくいく。私は何が間違っているのか理解できませんか?
も参照してください:http://stackoverflow.com/questions/28062095/pass-a-two-dimensional-array-to-a-function-of-constant-parameter –
私のデュープリンクで述べたように、おそらくこれはCタイプのシステムの欠陥です。これは、なぜtypedefの背後にあるポインタや配列を隠すのが良い考えではないのかを強調していると思います。 – user694733
リンクされた質問は配列ポインタに関するものなので、正確な重複はありません。この場合、2D配列があります。答えはかなり同じでしょう。 – Lundin