我最近修复了一个类似
之类的错误const char *arr[] = {
"string1", //some comment
"string2",
"string3" //another comment
"string4",
"string5"
};
即。有人在" string3"和" string3"之后忘了和" string4"被粘贴在一起。现在,虽然这是完全合法的代码,是否有gcc警告标志或其他可以扫描代码库以获得类似错误的工具?
答案 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字符串串联。