在我的源代码中,我一直非常小心地自始至终使用 Unicode,始终调用广泛版本的 WinAPI 函数,在我的转换中非常小心,等等,以支持我的程序的许多用户使用非英语拷贝Windows。
但是错误会悄悄出现,我相信你们都能理解。我最近遇到了一次程序崩溃,在我的代码中只有一个地方,我调用函数“isspace”而不是“iswspace”。
是否有某种工具可以让我扫描我的源代码以查找所有 ANSI 函数调用,以期找到可能存在的更多错误?
谢谢。
最佳答案
我在一段时间前开发的软件中遇到了问题。我发现问题是由 strcpy()、strcat() 等各种没有保护的字符串函数引起的,如果源出于任何原因出现问题,它们可能会覆盖目标缓冲区。
我当时所做的是编写一个 C 解析器(那时我正在使用 C...)并检测所有函数调用(这在 C 语法中很容易:'(' 是一个函数调用,如果在一个 block 中. 在 C++ 中,你也必须检测类和结构,但这并没有太多工作。)现在你可以在你的软件不应该使用的任何函数上生成一个错误,这会破坏你的构建。
免费的 C++ 解析器“无处不在”,因此您可以使用其中之一并重用该代码。
现在,还有另一种方法,它使用预处理器:对于您不希望软件使用的任何函数,您创建一个#define,它在使用时会产生错误:
#define isspace function-error "please use iswspace() instead of isspace()"
当然,这意味着你首先需要知道这些函数的列表,正如其他人提到的,你可以通过查看你的动态库链接表来找到。但结果是,如果不先修复一些问题,您将无法编译软件。一个问题是,您必须在最后包含的头文件中这样做,否则您的库头文件可能会出现一些问题:
#include <boost/shared_ptr.hpp>
#include <non_unicode_function.h>
... your functions ...
这可能比 C++ 解析器更简单,但也可能没那么有趣……然而,如果您偶尔需要调用一个禁止的函数,您可以做一个 #undef 并清楚地记录下来,等等。并在之后恢复该值。
关于c++ - 如何在源代码中查找所有非 Unicode 函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19732497/