如果使用了函数,请编译器发出警告

时间:2013-11-25 09:28:39

标签: c macros warnings c-preprocessor

我有 C 代码,其中包含大量调用strcmpstrcpy,导致各种问题。 我想将其迁移到strncmpstrncpy,但我现在无法更新所有代码。我想在使用函数的地方添加编译器警告。

以下强制替换#define strcmp(x,y) strncmp16(x,y,64),但问题仍在代码中。

有没有办法添加#warning,以便代码仍然可以编译,但会发出警告,不使用大小的函数。

它是一个很大的代码库,必须在四个不同的编译器(GCC,IAR,GHS和VC)中编译。它是我们自己的 C 库,主要用于嵌入式系统。

编辑:我不想找到所有事件。有数千种工具可用于查找和替换它们。我希望有一个警告,以便下次有人查看他们将评估和修复代码的代码。

编辑:Strncmp& strncpy有很多问题,我非常清楚这一点。我正在做出明智的决定。这些函数位于我们自己的 C 库中,而不仅仅是编译器 C 库中的默认函数。

2 个答案:

答案 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)