将const添加到指向固定大小的指针数组

时间:2015-07-26 09:20:37

标签: c gcc clang const gcc-warning

我一直在寻找一种在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限定符来做违法行为?如果是这样,为什么它是非法的?

0 个答案:

没有答案