MSVC 1900并定义vsnprintf

时间:2017-03-01 15:55:46

标签: c visual-c++ printf

我的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

我不知道如何通过最少的修改来摆脱错误。

你可以帮帮我吗?

1 个答案:

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