您的位置:首页 > 编程语言 > C语言/C++

关于程序里的一些基本的“断言”和“序列化”的预处理定义

2014-04-21 17:20 302 查看
**macro.h

#pragma once

#ifdef MHBQ
#define MITC_HBQ_EXT __declspec(dllexport)
#else
#define MITC_HBQ_EXT __declspec(dllimport)
#endif

#define _MITC_HBQ_BEGIN namespace MHbq {
#define _MITC_HBQ_END }

#define _ASSERTE_RT(expr) \
_ASSERTE(expr); \
if(!(expr)) return; \

#define _ASSERTE_RT_BL(expr) \
_ASSERTE(expr); \
if(!(expr)) return FALSE; \

#define _ASSERTE_RT_UI(expr) \
_ASSERTE(expr); \
if(!(expr)) return 0; \

#define _ASSERTE_RT_DBL(expr) \
_ASSERTE(expr); \
if(!(expr)) return 0.; \

#define GETSTR(X) #X

const long lEndVersion = 999; //结束版本号

//预处理保存
#define _PRESAVE(beginMark) \
CFile* pFile = ar.GetFile(); \
{ \
CString strbeginMark(beginMark); \
ar << strbeginMark; \
} \

//开始保存一个版本的数据
#define _BEGINESAVE(version) \
{\
ar << version; \
ar.Flush(); \
ULONGLONG posBegine = pFile->GetPosition();\
LONGLONG dLen = 3; \
ar << dLen; \
{ \
//结束保存一个版本的数据
#define _ENDSAVE\
} \
ar.Flush(); \
ULONGLONG posEnd = pFile->GetPosition();\
LONG posOffset = LONG(posBegine - posEnd);\
/*ULONGLONG lngFile = */pFile->Seek(posOffset, CFile::current); \
posOffset = - posOffset; \
pFile->Write(&posOffset, sizeof(LONGLONG)); \
pFile->SeekToEnd(); \
}
//保存后处理
#define _POSTSAVE \
ar << lEndVersion; \
ar.Flush();\
pFile->SeekToEnd(); \

//预处理打开
#define _PREOPEN(beginMarkCheck) \
int iVersion = -1; \
LONGLONG dLen = 0; \
TCHAR *char1 = NULL; \
CString strMark(_T("")); \
ar >> strMark; \
_ASSERT(strMark==beginMarkCheck); \
OutputDebugString(strMark);\
while (ar >>iVersion,iVersion < lEndVersion) \
{ \
ar >> dLen; \
switch(iVersion) \
{ \
//打开后处理
#define _POSTOPEN \
default: \
{ \
char1 = new TCHAR[(size_t)dLen]; \
LONGLONG lngReadLen = dLen - sizeof(LONGLONG); \
if (lngReadLen > 0) \
{ \
ar.Read(&char1,(UINT)lngReadLen); \
delete []char1; char1 = NULL;\
}\
} \
break; \
} \
} \
if ( iVersion == lEndVersion) \
{ \
int i = 0; \
i = iVersion; \
\
} \
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息