`

编译错误C3163:_vsprintf的属性声明不兼容

阅读更多

编译错误C3163:_vsprintf的属性声明不兼容

问题

在昨天用 VS2008 和最新的 V7.1SDK 编译程序的 ZLIB 时候,出现了一个错误:

38> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\stdio.h(358) : error C3163: '_vsnprintf': attributes inconsistent with previous declaration
38>        C:\Program Files\Microsoft Visual Studio 9.0\VC\include\stdio.h(350) : see declaration of '_vsnprintf'

 

看了一下,粗看之下,感觉到很奇怪,这可是 VC 自己的头文件的定义,难道还有错误,在发布的时候都没有发现吗?转念一想,编译别的程序的时候也用到了这个文件,怎么没有报错呢?这其中有什么古怪?

 

解决办法

Gooogle 上用“ error C3163: '_vsnprintf': attributes inconsistent with previous declaration ”作为关键词搜索了一下,很快找到了这个网址: http://hi.baidu.com/johnllon/blog/item/8b22a5074a8d06ce7b8947e0.html ,描述了与我遇到的相同的问题,作者遇到了这个问题后已经解决了,原因是:

  在使用 vsnprintf 这个函数的 cpp 文件中,包含了 # define vsnprintf _vsnprintf 的定义。在以前版本的 vc 中,没有定义 vsnprintf ,只定义 _vsnprintf 。而在 2008 版本中,添加了 vsnprintf 的定义。因此在编译的时候导致出现了上述错误。

解决的办法是针对 vc2008 前的 vc 定义宏:

#if (_MSC_VER < 1500)
#define vsnprintf _vsnprintf
#endif

分享到:
评论

相关推荐

    vsprintf_printf_

    在Linux系统中,`printf`函数是C语言标准库中的一个关键组成部分,它用于格式化输出数据到标准输出设备,如终端。`printf`函数基于`vsprintf`函数,后者是一个更为底层的版本,用于将格式化的字符串写入指定的缓冲区...

    sprintf,vsprintf越界问题

    sprintf 和 vsprintf 越界问题 sprintf 和 vsprintf 是两种常用的字符串格式化函数,但是它们也存在越界问题。如果参数太长,可能会导致越界,严重的会导致单板异常复位或其他单板运行异常。 一、sprintf 越界问题...

    c标准库中的 string.c / printf.c / vsprintf.c 文件

    本主题将详细探讨`string.c`、`printf.c`和`vsprintf.c`这三个文件所代表的C标准库函数。 `string.c`文件通常包含了C语言标准库中的字符串处理函数。这些函数对于处理和操作字符数组至关重要。以下是一些关键的字符...

    vsprintf()

    - **格式化字符串**:正确使用格式化字符串,避免格式不匹配导致的错误。 - **资源管理**:正确使用 `va_start()` 和 `va_end()` 宏,确保资源得到妥善管理。 #### 六、总结 `vsprintf()` 函数提供了强大的字符串...

    vsprintf多参数的打印处理

    `vsprintf` 是 C 语言标准库中的一个函数,用于将格式化的字符串写入一个字符数组中。与 `printf` 和 `sprintf` 相比,`vsprintf` 提供了更多的灵活性,尤其是在处理可变参数列表时。 #### 函数原型 ```c int ...

    STM8 COSMIC 头文件stdarg调用vsprintf报错 解决环境

    在STM8的嵌入式开发过程中,我们可能会遇到使用C标准库函数`vsprintf`时出现编译错误的问题。这个问题通常涉及到编译器兼容性、库版本差异或头文件不匹配等因素。标题提到的"STM8 COSMIC 头文件stdarg调用vsprintf...

    vsprintf送格式化输出到串中

    `vsprintf`函数是C语言中的一个标准库函数,它属于`stdio.h`头文件,主要功能是将格式化的字符串输出到一个字符数组(字符串)中,而不是像`printf`那样输出到标准输出设备(通常是显示器)。这个函数的名字由...

    vsprintf源代码.txt#资源达人分享计划#

    vsprintf源代码.txt#资源达人分享计划#

    用c语言根据可变参数合成字符串的实现代码

    在C语言中,合成字符串通常涉及使用`printf`系列函数,但这些函数并不直接支持动态地根据可变参数创建字符串。然而,通过使用`stdarg.h`库中的宏和函数,我们可以实现这样的功能。本篇文章将深入讲解如何用C语言根据...

    arm初学者之串口驱动中Uart_Printf()函数

    * 错误报告:使用 Uart_Printf() 函数可以将错误信息发送到串口,方便开发者排查错误。 Uart_Printf() 函数是 ARM 串口驱动中的一种重要函数,提供了一种方便的方式来将格式化字符串发送到串口。

    const_value_type.rar_memory

    2. **vsprintf函数**:`vsprintf`是C标准库中的一个函数,原型为`int vsprintf(char * restrict s, const char * restrict format, va_list ap)`。它接受一个格式化字符串`format`,一个可变参数列表`ap`,以及一个...

    自己写的printf,但是不能输出float型的数据

    标题提到的问题是“自己写的printf不能输出float型的数据”,这通常意味着用户尝试实现了一个自己的`printf`函数,但该函数不支持浮点数(float)的输出。 在C语言中,`printf`函数的灵活性来自于其格式化字符串,...

    PowerSys平台程序员手册-VOS

    - 同样,这部分内容未给出具体的属性说明,但通常这类属性会涉及到函数的输入输出特性、兼容性问题或是错误处理机制等。 #### 2. 编程接口 接下来的章节重点介绍了一系列实用的编程接口,这些接口可以帮助开发者更...

    vsprintf 单片机测试

    vsprintf 新唐单片机测试 log 添加 可以通过宏定义,设置是否打印程序中的log调试信息。 但是加上vsprintf之后,编译出来的二进制文件的大小会变大。 谁知道更好的方法,可以告诉我。

    c可变参数用法 命令

    ### C语言中的可变参数用法详解 在C语言中,可变参数函数是指那些能够接受不定数量参数的函数。这种特性在很多场合下都非常有用,尤其是在日志记录、错误处理以及网络通信等场景中。本文将通过一个具体的示例来深入...

    C标准库源代码(学习C/C++必备)

    C标准库源代码,能提高对C的理解,不错的哦 下载文件列表 Pack : clibsource.rar C 标准库源代码\ABORT.C C标准库源代码\ABS.C C标准库源代码\ACCESS.C C标准库源代码\ADJUSTFD.C C标准库源代码\ALGRITHM C标准库源...

    C语言库函数归纳

    ### C语言库函数归纳 #### 1. vsscanf() - **定义**: `#include &lt;stdio.h&gt;` - **函数原型**: `int vsscanf(const char *str, const char *format, va_list ap);` - **功能描述**: `vsscanf()` 函数用于根据指定的...

Global site tag (gtag.js) - Google Analytics