gcc标志检测字符串文字串联?

时间:2015-02-26 13:50:29

标签: c

我最近修复了一个类似

之类的错误
const char *arr[] = {
"string1", //some comment
"string2",
"string3"  //another comment
"string4",
"string5"
};

即。有人在" string3"和" string3"之后忘了和" string4"被粘贴在一起。现在,虽然这是完全合法的代码,是否有gcc警告标志或其他可以扫描代码库以获得类似错误的工具?

2 个答案:

答案 0 :(得分:1)

您可以使用的基本“工具”是预处理器黑客,但这是一个非常难看的解决方案:

#include <stdlib.h>
#include <stdio.h>

int start = __LINE__;
const char *arr[] = {
"string1", //some comment
"string2",
"string3"  //another comment
"string4",
"string5"
};int end = __LINE__;

int main(int argc, char **argv){
    printf("arr length: %zu\n", sizeof(arr) / sizeof(arr[0]));
    printf("_assumed_ arr length: %d\n", (end - start - 2));
}

答案 1 :(得分:1)

false有这样的警告:

-传统(仅限C和Objective-C)

警告某些在传统C和ISO C中表现不同的构造。还警告没有传统C等效项的ISO C构造和/或应避免的有问题的构造。

.....

  • 检测到使用ISO字符串串联。