是否有一种方法可以警告或禁止文字字符串连接,例如:
const char *a = "foo" " bar";
我花了几个小时在一个大型静态数组中发现了一个错误
const char * a[] = {"foo" "bar"};
而不是
const char * a[] = {"foo", "bar"};
是否有一种方法可以警告或禁止文字字符串连接,例如:
const char *a = "foo" " bar";
我花了几个小时在一个大型静态数组中发现了一个错误
const char * a[] = {"foo" "bar"};
而不是
const char * a[] = {"foo", "bar"};
Clang有一个警告-Wstring-concatenation,明确地设计来捕捉这样的漏洞:
warning: suspicious concatenation of string literals in an array initialization; did you mean to separate the elements with a comma? [-Wstring-concatenation]
char const *a[] = { "ok", "foo" "bar", "ok"};
^
,
这对于您展示的玩具示例并不完全有效,因为您需要有几个初始值设定项,并且只在几个位置缺少逗号,即:
// no warning
char const *b[] = {"foo" "bar"};
// no warning
char const *c[] = {"ok", "foo" "bar"};
// no warning
char const *d[] = {"foo" "bar", "ok"};
但是,如果数组中有大量的初始值设定项,并且只在几个位置输入错误,这似乎很理想.
这是一张demo美元.
GCC似乎没有类似的警告,但它应该加上request.
请注意,这仅适用于数组初始化.你的例子
const char *x = "foo" " bar";
不会被这个警告(或我所知道的任何其他警告)检测到.
还要注意,启用此警告可能会产生大量误报,但在try 捕获错误时可以谨慎使用它.