【发布时间】:2013-11-01 17:56:56
【问题描述】:
在我的源代码中,我一直非常小心地使用 Unicode,总是调用宽版本的 WinAPI 函数,在我的转换等方面非常小心,以支持我的程序的许多用户使用非英文副本窗户。
但是我相信你们都可以理解错误会逐渐蔓延。我最近遇到了一个程序崩溃,在我的代码中只有一个地方,我将函数称为“isspace”而不是“iswspace”。
是否有一些工具可以让我扫描我的源代码以查找所有 ANSI 函数调用,希望能找到更多可能存在的错误?
谢谢。
【问题讨论】:
-
列出所有 ANSI 函数调用并在源代码树中使用 grep?
-
首先定义
UNICODE和_UNICODE -
查看最终可执行文件(或 DLL)的符号表而不是源代码可能更容易。这样,您将只看到每个使用的 API 函数一次。您可以手动扫描该列表,然后将其保存为已批准,然后仅定期将差异扫描到已批准列表中。如果您喜欢这种方法,我可以将此评论变成答案。
-
我会做同样的“MvG”。但是我会看一下目标文件:我会编译程序并为每个目标文件使用 GNU MingW Binutils “objdump -t file.obj”。这将打印目标文件所需和定义的所有符号的列表。我会在输出中搜索以大写“A”结尾的函数名称(如“MessageBoxA”)。如果我有大量的目标文件,我会写一个小程序来做。
-
如果你使用 gcc,你总是可以使用毒 pragma 来得到编译错误,只要你不小心使用了一个你从未打算使用的符号:gcc.gnu.org/onlinedocs/cpp/Pragmas.html