我想在gcc8.2下启用数组边界检查,因此它可以帮助检查在编译期间数组下标是否超出范围,它可能会给出如下警告:
array subscript is above array bounds [-Warray-bounds]
我使用coliru进行了演示:
#include <iostream>
struct A
{
int a;
char ch[1];
};
int main()
{
volatile A test;
test.a = 1;
test.ch[0] = 'a';
test.ch[1] = 'b';
test.ch[2] = 'c';
test.ch[3] = 'd';
test.ch[4] = '\0';
std::cout << sizeof(test) << std::endl
<< test.ch[1] << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
编译并运行以下命令:
g++ -std=c++11 -O2 -Wall main.cpp && ./a.out
Run Code Online (Sandbox Code Playgroud)
输出显示如下,没有任何警告或错误。
8
b
Run Code Online (Sandbox Code Playgroud)
那么gcc8.2是否支持数组边界检查?如何启用它?
编辑:
更进一步,基于第一个答案,如果删除volatilein line volatile A test;,是否可以启用数组边界检查?
谢谢。