我的C代码中存在一个问题:出于测试目的,我需要在编译期间将vsnprintf
定义为_tests_vsnprintf
,如:
gcc -Dvsnprintf=_tests_vsnprintf file.c
这允许我从vsnpintf
调用返回错误,以便在我的应用中测试错误管理。它在Linux上运行良好,但不构建在Windows上,MSVC 1900(Visual Studio 2015)抱怨宏重新定义(C1189)。
错误来自stdio.h
中的此代码:
#if defined vsnprintf
...
#error Macro definition of vsnprintf conflicts with Standard Library function declaration
#endif
我不知道如何通过最少的修改来摆脱错误。
你可以帮帮我吗?答案 0 :(得分:1)
VC头中的代码专门阻止您这样做:
#if defined vsnprintf
// This definition of vsnprintf will generate "warning C4005: 'vsnprintf': macro
// redefinition" with a subsequent line indicating where the previous definition
// of vsnprintf was. This makes it easier to find where vsnprintf was defined.
#pragma warning(push, 1)
#pragma warning(1: 4005)
#define vsnprintf Do not define vsnprintf as a macro
#pragma warning(pop)
#error Macro definition of vsnprintf conflicts with Standard Library function declaration
#endif
正如@Olaf所提到的,如果重新定义标准函数,可能会遇到库代码问题。但是,如果您仅将此限制为代码并确保未通过任何标准标题获取新定义,那么您应该能够{/ 1}} 后加入#define vsnprintf
<stdio.h>