4.1.2 开启 -Wstrict-aliasing 编译参数 在本例中即使开启-Wstrict-aliasing严格别名告警编译参数,本例虽然违反了严格别名规则,在 x86-64 gcc 13.2 下也未收到任何编译告警提示。 4.1.3 开启 -fno-strict-aliasing 编译参数 开启-fno-strict-aliasing取消严格别名优化,修改 GCC -O2 导致的严格别名 Bug。 4.1.4 ...
4.1.2 开启 -Wstrict-aliasing 编译参数 在本例中即使开启-Wstrict-aliasing严格别名告警编译参数,本例虽然违反了严格别名规则,在 x86-64 gcc 13.2 下也未收到任何编译告警提示。 4.1.3 开启 -fno-strict-aliasing 编译参数 开启-fno-strict-aliasing取消严格别名优化,修改 GCC -O2 导致的严格别名 Bug。 4.1.4 ...
GCC不同优化等级下,严格别名规则开启情况:-O0、-O1需手动开启,-O2、-O3、-Os默认开启。开启-Wstrict-aliasing可以检测违反规则情况。4、违反严格别名规则示例 在GCC开启-O2优化时,示例代码产生未定义行为。示例代码分析:违反规则导致的输出结果变化。5、整数环绕 开启-O2优化时,有符号整数溢出视为...
-Wstrict-aliasing= 当代码可能破坏强重叠规则时给出警告 -Wstrict-null-sentinel 将未作转换的 NULL用作哨兵时给出警告 -Wstrict-overflow 禁用假定有符号数溢出行为未被定义的优化 -Wstrict-overflow= 禁用假定有符号数溢出行为未被定义的优化 -Wstrict-prototypes 使用了非原型的函数声明时给出警告 -Wstrict-selecto...
-Wstrict-aliasing 当代码可能破坏强重叠规则时给出警告 -Wstrict-aliasing= 当代码可能破坏强重叠规则时给出警告 -Wstrict-null-sentinel 将未作转换的 NULL 用作哨兵时给出警告 -Wstrict-overflow 禁用假定有符号数溢出行为未被定义的优化 -Wstrict-overflow= 禁用假定有符号数溢出行为未被定义的优化 ...
如果你的程序不遵守该规则(比如上面foo函数中出现double*ptr和n同时应用n的情况),就极有可能受到惩罚。GCC中与strict aliasing相关的选项除了-fstrict-aliasing/-fno-strict-aliasing,还有warning选项-Wstrict-aliasing=n,这个选项在你违反stict aliasing时给出警告,其中n为检查的力度,一般设为2。
-Wstrict-aliasing 当代码可能破坏强重叠规则时给出警告 -Wstrict-aliasing= 当代码可能破坏强重叠规则时给出警告 -Wstrict-null-sentinel 将未作转换的 NULL 用作哨兵时给出警告 -Wstrict-overflow 禁用假定有符号数溢出行为未被定义的优化 -Wstrict-overflow= 禁用假定有符号数溢出行为未被定义的优化 ...
◆strict-aliasing:对变量别名进行最严格的检查。 ◆unknown-pragmas:使用了不允许的#pragma。 ◆Uninitialized:在初始化之前就使用自动变量。 (不要被它的表面意思迷惑,下面是使用-Wall选项的时候没有生效的一些警告项,而且还有-Wextra)
-Wsign-compare (only in C++) -Wstrict-aliasing -Wstrict-overflow=1 -Wswitch -Wtrigraphs -Wuninitialized (only with -O1 and above) -Wunknown-pragmas -Wunused-function -Wunused-label -Wunused-value -Wunused-variable unused-function:警告声明但是没有定义的static函数; ...
-Wstrict-aliasing 当代码可能破坏强重叠规则时给出警告 -Wstrict-aliasing= 当代码可能破坏强重叠规则时给出警告 -Wstrict-null-sentinel 将未作转换的 NULL用作哨兵时给出警告 -Wstrict-overflow 禁用假定有符号数溢出行为未被定义的优化 -Wstrict-overflow= 禁用假定有符号数溢出行为未被定义的优化 ...