如何在VS2010中创建不带h的c++头文件

如何在VS2010中创建不带h的c++头文件,第1张

C++ 标准头文件 为了 和 C 标准头文件区分开,所以不用 后缀名

重新包装了余亩码 C标准头文件 为 前面加c ,比如 cstdio 基本就是原来的耐隐 stdio.h

cstdio 头文件的内容,包含了 stdio.h ,

但是原来c里面的函数名字先undef,然后重新定义

比如 #undef printf 再using ::printf

C/C++ code

#pragma GCC system_header

#include <bits/c++config.h>

#include <stdio.h>

#ifndef _GLIBCXX_CSTDIO

#define _GLIBCXX_CSTDIO 1

/竖哪/ Get rid of those macros defined in <stdio.h>in lieu of real functions.

#undef clearerr

#undef fclose

#undef feof

#undef ferror

#undef fflush

#undef fgetc

#undef fgetpos

#undef fgets

#undef fopen

#undef fprintf

#undef fputc

#undef fputs

#undef fread

#undef freopen

#undef fscanf

#undef fseek

#undef fsetpos

#undef ftell

#undef fwrite

#undef getc

#undef getchar

#undef gets

#undef perror

#undef printf

#undef putc

#undef putchar

#undef puts

#undef remove

#undef rename

#undef rewind

#undef scanf

#undef setbuf

#undef setvbuf

#undef sprintf

#undef sscanf

#undef tmpfile

#undef tmpnam

#undef ungetc

#undef vfprintf

#undef vprintf

#undef vsprintf

_GLIBCXX_BEGIN_NAMESPACE(std)

using ::FILE

using ::fpos_t

using ::clearerr

using ::fclose

using ::feof

using ::ferror

using ::fflush

using ::fgetc

using ::fgetpos

using ::fgets

using ::fopen

using ::fprintf

using ::fputc

using ::fputs

using ::fread

using ::freopen

using ::fscanf

using ::fseek

using ::fsetpos

using ::ftell

using ::fwrite

using ::getc

using ::getchar

using ::gets

using ::perror

using ::printf

using ::putc

using ::putchar

using ::puts

using ::remove

using ::rename

using ::rewind

using ::scanf

using ::setbuf

using ::setvbuf

using ::sprintf

using ::sscanf

using ::tmpfile

using ::tmpnam

using ::ungetc

using ::vfprintf

using ::vprintf

using ::vsprintf

_GLIBCXX_END_NAMESPACE

#if _GLIBCXX_USE_C99

#undef snprintf

#undef vfscanf

#undef vscanf

#undef vsnprintf

#undef vsscanf

_GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)

#if _GLIBCXX_USE_C99_CHECK || _GLIBCXX_USE_C99_DYNAMIC

extern "C" int

(snprintf)(char * __restrict, std::size_t, const char * __restrict, ...)

throw ()

extern "C" int

(vfscanf)(FILE * __restrict, const char * __restrict, __gnuc_va_list)

extern "C" int (vscanf)(const char * __restrict, __gnuc_va_list)

extern "C" int

(vsnprintf)(char * __restrict, std::size_t, const char * __restrict,

__gnuc_va_list) throw ()

extern "C" int

(vsscanf)(const char * __restrict, const char * __restrict, __gnuc_va_list)

throw ()

#endif

#if !_GLIBCXX_USE_C99_DYNAMIC

using ::snprintf

using ::vfscanf

using ::vscanf

using ::vsnprintf

using ::vsscanf

#endif

_GLIBCXX_END_NAMESPACE

_GLIBCXX_BEGIN_NAMESPACE(std)

using ::__gnu_cxx::snprintf

using ::__gnu_cxx::vfscanf

using ::__gnu_cxx::vscanf

using ::__gnu_cxx::vsnprintf

using ::__gnu_cxx::vsscanf

_GLIBCXX_END_NAMESPACE

#endif // _GLIBCXX_USE_C99

#endif

需要借用C语言的VA_LIST 宏汪燃定义,及相关 *** 作来实现可变参数。VA_LIST 所在头文件:#include <stdarg.h>,用法如下:(1)首先在函数里定义一具VA_LIST型的变量,这个变量是指向参数的指针;(2)然后用VA_START宏初始化刚定义的VA_LIST变量;(3)然后用VA_ARG返回可变的参数,VA_ARG的第二个参数是你要返回的困察虚参数的类型(如果函数有多个可变参数的,依次调用VA_ARG获取没键各个参数);(4)最后用VA_END宏结束可变参数的获取。以下是一个自定义打印接口的实现:<pre t="code" l="cpp">int my_printf(const char *fmt, )//表示参数可变

{

va_list args//定义va_list

static char gc_PrintfOutBuff[1000]

va_start(args, fmt)//初始化

vsnprintf((char *) gc_PrintfOutBuff, 1000, (char *) fmt, args)//这里没有使用VA_ARG取回单个变量,而是借用vsnprinf一次性读取。

va_end(args)//结束获取

puts("%s",(const char *)gc_PrintfOutBuff)//使用。

return 0

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/8228449.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存