我有 C 代码,其中包含大量调用strcmp
和strcpy
,导致各种问题。
我想将其迁移到strncmp
和strncpy
,但我现在无法更新所有代码。我想在使用函数的地方添加编译器警告。
以下强制替换#define strcmp(x,y) strncmp16(x,y,64)
,但问题仍在代码中。
有没有办法添加#warning
,以便代码仍然可以编译,但会发出警告,不使用大小的函数。
它是一个很大的代码库,必须在四个不同的编译器(GCC,IAR,GHS和VC)中编译。它是我们自己的 C 库,主要用于嵌入式系统。
编辑:我不想找到所有事件。有数千种工具可用于查找和替换它们。我希望有一个警告,以便下次有人查看他们将评估和修复代码的代码。
编辑:Strncmp& strncpy有很多问题,我非常清楚这一点。我正在做出明智的决定。这些函数位于我们自己的 C 库中,而不仅仅是编译器 C 库中的默认函数。
答案 0 :(得分:3)
虽然您可以使用#define强制错误,但C99标准中没有任何机制(C11中也可能没有)强制发出警告。
如果您使用的是gcc,则可以使用
__attribute_deprecated__
将原型标记为已弃用,例如:
int strcmp(const char *, const char *) __attribute_deprecated__;
答案 1 :(得分:2)
对于Visual Studio: 使用__declspec(不建议使用)为函数原型添加前缀,如MSDN
中所示您需要将警告级别提高到3 +。
示例:
#pragma deprecated(strcpy, strcmp)
此行将导致对任一函数的每次调用都省略C4995警告。 这些特定功能已发出C4996警告但您通过编译指示关闭该警告: #pragma warning(disable:4996)