我一直在寻找一种在C中传递固定大小数组的方法,这样编译器就可以检测大小错误,并且可以在传递的数组上使用sizeof()
。选择在结构中包装数组和指向固定大小的数组技巧之间的选择,我决定我喜欢后者而不是在我的代码中引入另一种类型。结果是代码类似于下面的示例代码:
int myfunc(const char (*a)[128]) {
return (*a)[0] == 0;
}
int main(void) {
char arr[128] = { 0 };
return myfunc(&arr);
}
然而,gcc(4.9.2)抱怨const
中的myfunc()
限定符:
test.c: In function ‘main’:
test.c:8:19: warning: passing argument 1 of ‘myfunc’ from incompatible pointer type
return myfunc(&arr);
^
test.c:1:5: note: expected ‘const char (*)[128]’ but argument is of type ‘char (*)[128]’
int myfunc(const char (*a)[128]) {
^
clang(3.6.0)编译时没有任何投诉。
所以我的问题是:我是否通过添加此const限定符来做违法行为?如果是这样,为什么它是非法的?