我相信这是正确的标题:
#include <cstdio>
请注意,上述声明与以下声明存在区别:
#include <stdio.h>
第一个将所有内容放入"std"命名空间中,第二个则不是。因此我选择使用第一个。
以下是我在aix6.1上使用g++4.4.6编译的代码:
#include <cstdarg> //< va_list
#include <cstdio> //< vsnprintf()
#include "virtual_utils.h"
namespace VS
{
const char* format_str( const char* str, ... ) throw()
{
static char buf[10][1024];
static unsigned long buf_no = 0;
char* cur_buf = buf[ ++buf_no % 10 ];
buf_no %= 10;
va_list vl;
va_start( vl, str );
#ifdef _MSC_VER
std::_vsnprintf( cur_buf, sizeof(buf), str, vl );
#else
std::vsnprintf( cur_buf, sizeof(buf), str, vl );
#endif
return cur_buf;
}
} //< namespace VS
我遇到以下错误:
virtual_utils.C: In function 'const char* VS::format_str(const char*, ...)':
virtual_utils.C:28: error: 'vsnprintf' is not a member of 'std'
编辑:
将上述代码修改,移除#include "virtual_utils.h"
并添加main()
后,在Ideone的gcc4.3.4编译器中有警告,而在gcc4.5.1编译器下则完全没有问题。
std::vsnprintf
在<cstdarg>
中,而不是<cstdio>
。 - CharlesB