令我惊讶的是,我刚刚发现MS Visual Studio 2003向上缺少C99 stdint.h.我确定他们有他们的理由,但有谁知道我可以在哪里下载副本?如果没有这个头文件,我就没有uint32_t等有用类型的定义.
我一直在寻找工具来帮助检测阻止程序作为64位代码正常运行的错误.最近,我一直在玩弄Klocwork及其自定义检查器功能,这让我可以使用XPath将源代码导航为树.这对于正则表达式来说是一种"更聪明"的替代方法,但我无法让它知道类型.
例如,假设我想找到一个for使用a int或a long计数的循环的每个实例.以下代码很容易找到.
for (int i = 0; i < 10; i++)
// ...
Run Code Online (Sandbox Code Playgroud)
搜索此代码很简单,因为变量定义就在循环内部.但是,请考虑以下示例.
int i;
// ...
for (i = 0; i < 10; i++)
// ...
Run Code Online (Sandbox Code Playgroud)
这很难找到,因为变量定义与循环是分开的,并且必要的XPath表达式要么笨重,要么容易出错.
那么,自定义Klocwork规则可以找到这样的表达式,其中类型感知是必要的,包括解析typedef和#define语句?还有其他工具可以做到这一点吗?
编辑1:考虑以下示例.
typedef int myint;
void Foo() {
int i;
for (i = 0; i < 10; i++) {
Bar();
}
myint j;
for (j = 0; j < 10; j++) {
Bar();
}
}
Run Code Online (Sandbox Code Playgroud)