GCC 警告字符串文字上的意外指针算术

问题描述 投票:0回答:1

随着不同语言之间的不断切换和变化,我时不时地发现自己尝试用 C/C++ 编写 python 或 JS 语法片段。不止一次让我困惑的是尝试使用 + 运算符将数字附加到字符串文字

foo(const char*);

foo("the number is " + 6);

它很高兴地进行编译,将指向字符串“mber is”的字符指针传递到我的函数中。如果我写的话就更有趣了

foo("the number is " + 20);

有人知道可以捕获此问题的警告选项吗?

c++ c gcc gcc-warning
1个回答
0
投票

GCC 确实通过

-Warray-bounds
中包含的
-Wall
警告发出关于出界指针算术的警告。然而,需要启用优化才能使其发挥作用,例如使用选项
-Wall -O2
GCC 13 产生:

<source>:4:45: warning: array subscript 20 is outside array bounds of 'const char [15]' [-Warray-bounds=]
    4 |     some_function_that_takes_a_const_chr_ptr("the number is " + 20);
      |     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~

Clang 对此有一个

-Wstring-plus-int
警告,但如果算术超出范围,GCC 目前没有等效的警告。

© www.soinside.com 2019 - 2024. All rights reserved.