本文主要進行對C++代碼進行學習與說明,一旦掌握了一些編程的技巧和方式,在繁瑣和復雜的代碼也不會難倒一些學者和專門從事開發的技術人員,好了下面進行代碼舉例說明。
C++代碼如下:
- //log.h
- #ifndef _LOG_H_
- #define _LOG_H_
- /*
- LOG Library(WIN98/NT/2000) ver 0.1
- Compile by: BC++ 5; C++ BUILDER 4, 5, 6, X; VC++ 5, 6; VC.NET; GCC;
- Copyright(c) 2006.5 - 2007.4 llbird [email protected] http://blog.csdn.net/wujian53
- Use:
- 這是一個很簡單的日志, 用的是C風格的函數,支持多線程
- 只要包含本文件,並且把log.cpp文件添加到項目中就可以了
- 在VC中你可能需要在log.cpp中添加#include "stdafx.h"
- 具體使用
- InitLog();//初始化
- LOG("程序啟動");
- LOG1("%s", str);
- DestroyLog();//可有可無
- 調試時輸出可以定義 LOG_TO_STD 或者 LOG_TO_DEBUG
- 對於C++ Builder
- 可以使用
- LOG(Exception *e or Exception &e);
- 對於WIN32 API
- LOG_LAST_ERROR();
- 對於_com_error
- LOG( _com_error &e);
- */
- #include <stdio.h>
- #include <time.h>
- #include <windows.h>
- #include <process.h>
- //使用短的原文件名
- #define LOG_SHORT_SOURCE_FILE
- //使用日志
- #define LOG_TO_FILE
- //定義標准錯誤輸出設備
- #define LOG_STD_DEV stderr
- //使用標准輸出設備
- //#define LOG_TO_STD
- //向調試窗口輸出
- //#define LOG_TO_DEBUG
- //輸出messagebox
- //#define LOG_TO_MESSAGE_BOX
- //多線程用臨界區
- extern CRITICAL_SECTION _g_LogMutex;
- //全局日志文件名
- extern char _g_LogFileName[MAX_PATH];
- extern void InitLog(); //>初始化日志
- extern void DestroyLog();//>清除日志
- extern BOOL Log(const char* src/*源程序名*/, int line/*行號*/, const char* description/*描述*/);//>新增日志
- //記錄日志宏列表
- #define LOG(arg) Log(__FILE__, __LINE__, (arg))
- //多參數記錄日志宏
- #define LOG1(str, p1) { LOG_SPRINTF_BUFFER; sprintf(buffer, (str), (p1)); LOG(buffer); }
- #define LOG2(str, p1, p2) {LOG_SPRINTF_BUFFER; sprintf(buffer, (str), (p1), (p2)); LOG(buffer); }
- #define LOG3(str, p1, p2, p3) { LOG_SPRINTF_BUFFER; sprintf(buffer, (str), (p1), (p2), (p3)); LOG(buffer); }
- #define LOG4(str, p1, p2, p3, p4) { LOG_SPRINTF_BUFFER; sprintf(buffer, (str), (p1), (p2), (p3), (p4));LOG(buffer);}
- #define LOG5(str, p1, p2, p3, p4, p5) { LOG_SPRINTF_BUFFER; sprintf(buffer, (str), (p1), (p2), (p3), (p4), (p5)); LOG(buffer);}
- //記錄windows API錯誤值
- #define LOG_LAST_ERROR() { LOG_SPRINTF_BUFFER; DWORD eid = GetLastError();sprintf(buffer, "Last Error(%d):", eid); int len = strlen(buffer); \
- FormatMessage( \
- FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,\
- NULL,\
- eid, \
- MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), \
- buffer + len,\
- DEFAULT_LOG_SPRINTF_BUFFER_SIZE-len-1, \
- NULL \
- ); \
- LOG(buffer); \
- }\
- #if defined(__cplusplus) && defined(_INC_COMDEF)
- ///新增COM錯誤信息
- inline BOOL Log(const char* src, int line, _com_error &e)
- {
- char buffer[DEFAULT_LOG_SPRINTF_BUFFER_SIZE];
- sprintf(buffer, "_com_error\tCode = %x\tCode meaning = %s\tSource = %s\tDescription = %s",
- e.Error(), (LPCSTR)(_bstr_t)e.ErrorMessage(), (LPCSTR)(_bstr_t)e.Source(), (LPCSTR)(_bstr_t)e.Description());
- return LOG_POS(src, line, buffer);
- }
- #endif
- ///新增VCL異常信息
- #if defined(__cplusplus) && defined(__BORLANDC__) && defined(INC_VCL)
- inline BOOL Log(const char* src, int line, Exception *e)
- {
- return LOG_POS(src, line, e->Message.c_str());
- }
- inline BOOL Log(const char* src, int line, Exception &e)
- {
- return LOG_POS(src, line, e.Message.c_str());
- }
- #endif
- #endif _LOG_H_
看了以上那麼多的C++代碼我相信大家已經有點迷糊了吧,那就好好消化一下吧。