封装自己的打印函数:用于debug和输出log

封装自己的打印函数:用于debug和输出log

需求:如何简便的输出调试信息

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>/*包含va_list 和va_start _va_end的头文件*/

int debug = 1;/*定义全局变量作为打印开关*/
void debugprint(const char *fmt,...){
/*...的前面必须是char型的指针变量*/
  if(debug){
     va_list valist;/*c语言中可变参数的宏*/
     char buff[512] = "abcd";
     va_start(valist,fmt);
     vsprintf(buff,fmt,valist);/*vsprintf(char *string,char *fmt,va_list parm)*/
     va_end(valist);
  }
  return;
}
void debugwrite(const char* filename,const char *fmt,...){
   va_list valist;/*c语言中可变参数的宏*/
   FILE* fp;      /*filename = xxx.txt*/
   fp = fopen(filename,"w");
   va_start(valist,fmt);
   vfprintf(fp,fmt,valist);
   va_end(valist);
   fclose(fp);
   return;
}
void debugappend(FILE* fp,const char *fmt,...){
   va_list valist;/*c语言中可变参数的宏*/
   if (fp == NULL){printf("Open File failed.\n");exit(0);}
   va_start(valist,fmt);
   vfprintf(fp,fmt,valist);
   va_end(valist);
   return;
}
int main(){
   debugprint("%s::%s->%d\n",__FILE__,__FUNCTION__,__LINE__);
   debugwrite("physicalparms.txt","%s::%s->%d\n",__FILE__,__FUNCTION__,__LINE__);
   FILE* fp = fopen("testappend.txt","a");
   debugappend(fp,"%s::%s->%d\n",__FILE__,__FUNCTION__,__LINE__);
   debugappend(fp,"%s::%s->%d\n",__FILE__,__FUNCTION__,__LINE__);
   debugappend(fp,"%s::%s->%d\n",__FILE__,__FUNCTION__,__LINE__);
   fclose(fp);
   return 0;
}

相关资料:

  1. 程序有参考此文:自己封装的打印函数
  2. 关于预定义宏
  3. 关于vfprintf和fprintf的区别
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
介绍一下自己的LUA封装 1: C++中的类可以注册到LUA 中,在LUA里面可以使用像C++一样使用对象调用函数一样 2: 将C或者C++中的函数注册到LUA中,在LUA里面直接调用全局函数 3: 加载LUA文件并且执行,执行LUA文件中的某个函数。 会自动平衡LUA堆栈,使用的时候不需要担心LUA栈的问题 4: 可以将LUA中的某个函数作为回调函数,当条件满足时调用回调函数 .................. 这篇就介绍一下怎样在LUA中使用C++的类对象 //说明一下::带有LRT_ 的函数都是自己封装的,在LUA 库里面是没有的 --下面是main 函数 int _tmain(int argc, _TCHAR* argv[]) { //获取LUA 运行状态 lua_State *l = LRT_GetLuaState(); //注册C++类 RegisterLuaClass::RegisterClass(l); char current_dir[260] = {0}; DWORD ret = GetCurrentDirectory(260, current_dir); std::string strTmp(current_dir); std::stringstream strS; strS<<strTmp<<"\\LuaClassTest.lua"; //加载一个LUA文件,只是加载了,并没有执行,一定要返回成功了才可以 LRT_RunChunk if (LRT_ErrorCode_Success == LRT_CreateChunkFromFile(l,strS.str().c_str())) { LRT_RunChunk(l); } strS.clear(); strS.str(""); strS<<strTmp<<"\\dataStruct.lua"; if (LRT_ErrorCode_Success == LRT_CreateChunkFromFile(l,strS.str().c_str())) { LRT_RunChunk(l); } getchar(); return 0; } --下面是LUA文件中代码 --获取C++对象,参数为 类型的名称,这个名称和C++的名称对应 local object = LRTGetObject("Test.Lua.Class") --调用对象的函数 object:Fun1() object:Fun2()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值