目录
背景
封装打印函数
时间函数
用扇贝好久背了好久,依然不记得单词,就想着把那些记完就忘的单词全部shou收集起来,放到我自己的记单词列表中,方便随时可以看;并且做成选择题,可以自己测试;
边学文件流操作,边写一些功能函数,记录一些自己踩到过的的坑;随机算法还是很Low的随机数,没有的根据单词的掌握程度来挑选单词;
自己封装一个打印函数,方便一键关闭调试打印;
int g_SHOW_DEBUG = 2;
#define SHOW_NULL 2
#define SHOW_INFO 1
#define SHOW_DEBUG 2
#define ERROR_DEBUG 2
/* **********************https://blog.csdn.net/Code_Franck***********************
函数描述:使用宏定义封装printf函数;
*代码调试期间可以把宏SHOW_NULL设置为2,调试完成只需要改这个宏即可清除所有调试打印;
创建时间:2019/9/8
参数说明:
DebugFlag:的SHOW_NULL表示不打印;SHOW_INFO表示正常打印,效果等于printf;SHOW_DEBUG表示打印调试信息,包括函数名和行号;
ERROR_DEBUG表示错误打印,在打印报错时使用;
返回值:
无
********************************************************************************/
#define MyDebug(DebugFlag, format, ...) \
if(SHOW_DEBUG == DebugFlag){ \
printf("DEBUG [%s][%d]" format ,__FUNCTION__, __LINE__,##__VA_ARGS__); \
}else if(SHOW_INFO == DebugFlag) { \
printf(format ,##__VA_ARGS__); \
}else {}
如上,传入要给打印的flag,根据flag来选择打印类型;
SHOW_INFO用来打印程序必要的一些打印,打印方式也是最简单的跟printf一样;
SHOW_DEBUG用来打印一些调试打印,可以在可以在程序调试的时候使用,调试完删掉即可;
ERROR_DEBUG打印程序进入错误分支的打印;
SHOW_NULL ;调试打印全部传入,所以可以在最后,把SHOW_NULL 设置为0即可以删除所有调试打印;并且调试的时候可以打印函数名和行号,非常方便;
g_SHOW_DEBUG,只需开头设置g_SHOW_DEBUG的值,末尾再恢复回去,即可以实现一次性控制整个函数的打印;详细的使用方法后面代码中可以看到;
在记单词的时候,可以统计整个测试所使用时间,而且实现简单,所以索性就搞了个函数出来;分别是打印当前时间,和打印两次时间戳的时间差;实际这两个函数并没有啥用途,哈哈哈!!!
#pragma once
#include
#include
#include
#include "MyBase.h"
#include
#include "Main.h"
//Sleep(): delay函数,单位毫秒,需要包含头文件windows.h
void GetStartEndTime(tm *StartTime, tm *EndTime, int Mode);
void ShowTime();
/* **********************https://blog.csdn.net/Code_Franck***********************
函数描述:打印当前系统时间,格式为: 年-月-日 时:分:秒
创建时间:2019/9/7
参数说明:
无
返回值:
无
********************************************************************************/
void ShowTime()
{
int Present_DebugFlag = g_SHOW_DEBUG;
g_SHOW_DEBUG = 1;
struct tm t; //tm结构指针
time_t now; //声明time_t类型变量
time(&now); //获取系统日期和时间
localtime_s(&t, &now); //获取当地日期和时间
MyDebug(g_SHOW_DEBUG,"Now Time: %04d-%02d-%02d %02d:%02d:%02d\n", t.tm_year + 1900, t.tm_mon + 1, t.tm_mday, t.tm_hour, t.tm_min, t.tm_sec);
g_SHOW_DEBUG = Present_DebugFlag;
return;
}
/* **********************https://blog.csdn.net/Code_Franck***********************
函数描述:使用该函数来当前时间或者获取两次时间差。
创建时间:2019/9/7
参数说明:
*StartTime:第一个时间戳
*EndTime:第二个时间戳
Mode:函数模式;0表示获取第一个时间,1表示获取第二个时间,并计算两次时间差
返回值:
无
********************************************************************************/
void GetStartEndTime(tm *StartTime, tm *EndTime, int Mode)
{
int Present_DebugFlag = g_SHOW_DEBUG;
g_SHOW_DEBUG = 1;
time_t Now_Time; //声明time_t类型变量
time(&Now_Time); //获取系统日期和时间
char ShowTime[40];
char TempTime[10];
int year, mon, day, hour, min, sec;
switch (Mode) {
case 0:
localtime_s(StartTime, &Now_Time); //获取当地日期和时间
break;
case 1:
localtime_s(EndTime, &Now_Time); //获取当地日期和时间
year = EndTime->tm_year - StartTime->tm_year;
mon = EndTime->tm_mon - StartTime->tm_mon;
day = EndTime->tm_mday - StartTime->tm_mday;
hour = EndTime->tm_hour - StartTime->tm_hour;
min = EndTime->tm_min - StartTime->tm_min;
sec = EndTime->tm_sec - StartTime->tm_sec;
strcpy_s(ShowTime, "Using time: ");
if (year) {
_itoa_s(sec, TempTime, 10);
strcat_s(TempTime, "年");
strcat_s(ShowTime, TempTime);
}
if (mon) {
_itoa_s(sec, TempTime, 10);
strcat_s(TempTime, "月");
strcat_s(ShowTime, TempTime);
}
if (day) {
_itoa_s(sec, TempTime, 10);
strcat_s(TempTime, "日");
strcat_s(ShowTime, TempTime);
}
if (hour) {
_itoa_s(sec, TempTime, 10);
strcat_s(TempTime, "时");
strcat_s(ShowTime, TempTime);
}
if (min) {
_itoa_s(sec, TempTime, 10);
strcat_s(TempTime, "分");
strcat_s(ShowTime, TempTime);
}
if (sec) {
_itoa_s(sec, TempTime,10);
strcat_s(TempTime, "秒");
strcat_s(ShowTime, TempTime);
}
MyDebug(g_SHOW_DEBUG,"%s", ShowTime);
break;
default:
MyDebug(ERROR_DEBUG,"error!!! \n");
}
g_SHOW_DEBUG = Present_DebugFlag;
return;
}
先写到这好了!