gpt4 book ai didi

c - 访问 int (*foo)[3] 的索引 4 时没有警告

转载 作者:太空狗 更新时间:2023-10-29 16:00:59 26 4
gpt4 key购买 nike

在下面的代码中,令我感到惊讶的是 gcc 没有警告我有关索引的信息。这是什么原因?

int foo[3] = {1,2,3};
int (*bar)[3];

int main(void) {
bar = &foo;
foo[42] = 42;
(*bar)[42] = 42;
return 0;
}

我只收到 foo 的错误,bar 没有。为什么?

$ gcc -std=c99 -Wall -O2 -Wpedantic -Wextra test.c
test.c: In function ‘main’:
test.c:6:8: warning: array subscript is above array bounds [-Warray-bounds]
foo[42] = NOPE;
^

注意

我本可以编写 bar = foo 并将 bar 声明为 int* bar,但我没有,我也不知道为什么... 一个解决方案比另一个更好,这是另一个有趣的问题。

最佳答案

如果您评论 foo 访问,它会在 bar 访问上显示警告,所以看起来这只是 gcc 未显示的情况你同样的警告两次。

它们是否应该被归类为同一警告是另一回事 - 看看一方面有两个不同类型的变量,但另一方面它们为相同的内存起了别名。但这对我来说似乎很合理。最坏的情况是您需要进行额外的编译,直到您修复它们。

int foo[3] = {1,2,3};
int (*bar)[3];

int main()
{
bar = &foo;
// foo[42] = 42;
(*bar)[42] = 42; // warning
return 0;
}

20 : warning: array subscript is above array bounds [-Warray-bounds]
(*bar)[42] = 42;
~~~~~~~~~^

关于c - 访问 int (*foo)[3] 的索引 4 时没有警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39893471/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com