程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++中宏的使用技巧

C++中宏的使用技巧

編輯:C++入門知識

直接上代碼,這次歸納了6點


[cpp]
// Maro.cpp : 定義控制台應用程序的入口點。  
//  
 
#include "stdafx.h"  
#include <Windows.h>  
#include <iostream>  
#include <string>  
using namespace  std; 
 
// 宏的用法  
 
// 1.因為宏是在編譯時進行簡單的替換,所以很多時候使用宏在突出  
//   重點參數的同時,也會提高效率。  
#define MAXHEIGHT  100.0  
// 不過自定義單位一般使用typedef  
typedef int SYSINT; 
 
// 2.短小實用的語句  
#define SAFE_DELETE(p)      {if(p) delete p; p = NULL;}  
#define SAFE_RELEASE(p)     {while(p->Release()>0); p = NULL;}  
 
// 3.類的導出的聲明,因為編譯時會報錯,所以先全部注釋掉  
//#ifdef MODULE_EXPORTS  
//# define MODULE_API __declspec(dllexport)  
//#else  
//# define MODULE_API __declspec(dllimport)  
//#     ifdef   _DEBUG  
//#         pragma comment(lib, "Moduled.lib")  
//#     else  
//#         pragma comment(lib, "Module.lib")  
//#     endif  
//#endif  
 
// 4.一些編譯時的條件語句  
#ifndef _WIN32_WINNT            // 指定要求的最低平台是 Windows Vista。  
#define _WIN32_WINNT 0x0600     // 將此值更改為相應的值,以適用於 Windows 的其他版本。  
#endif  
 
 
// 5.實用的小函數  
// 例如計算某函數的運行時間  
#define BEGIN_TIME  \  
    UINT start = GetTickCount();     
 
#define END_TIME(total) \  
    total = GetTickCount() - start;\ 
 
//當然也可以  
#define USE_TIME(used, fuc) \  
    UINT begin1 = GetTickCount();\ 
    fuc;\ 
    used = GetTickCount() - begin1;\ 
 
// 6.定義基類,派生類的接口,這樣可以減少修改量,突出接口 ##表示連接  
#define INTERFACE_Creature(terminal) \  
    public:                          \ 
    virtual void SetName(const string& strName) ##terminal\ 
    virtual bool GetName(string &strName) ##terminal 
 
#define BASE_Createture     INTERFACE_Creature(=0;)  
#define Divd_Createture     INTERFACE_Creature(;)  
 
class BaseClass 

    BASE_Createture; 
}; 
 
class DivdClass : public BaseClass 

    Divd_Createture; 
}; 
 
bool DivdClass::GetName(string& strName) 

    return true; 

 
void DivdClass::SetName(const string& strName) 

 

 
void Dosth(int time = 500) 

    Sleep(time); 

 
int _tmain(int argc, _TCHAR* argv[]) 

    //1  
    double dLength = 50.0; 
    if (dLength > MAXHEIGHT) 
    { 
        // do sth  
    } 
 
    //2  
    double *p = new double[100]; 
    SAFE_DELETE(p); 
 
    //3  
    //略  
 
    //4  
#ifdef DOSTH  
    //DO STH  
#endif  
     
    //5  
    int useTime; 
//我們可以這樣  
    BEGIN_TIME 
        Dosth(); 
    END_TIME(useTime); 
//還可以這樣  
    USE_TIME(useTime, Dosth()) 
    printf("Used time is %d\n", useTime); 
 
    //6  
    BaseClass *pD = new DivdClass; 
    pD->SetName("test"); 
    SAFE_DELETE(pD);    // 學而時習之,不亦說乎  
    return 0; 

// Maro.cpp : 定義控制台應用程序的入口點。
//

#include "stdafx.h"
#include <Windows.h>
#include <iostream>
#include <string>
using namespace  std;

// 宏的用法

// 1.因為宏是在編譯時進行簡單的替換,所以很多時候使用宏在突出
//   重點參數的同時,也會提高效率。
#define MAXHEIGHT  100.0
// 不過自定義單位一般使用typedef
typedef int SYSINT;

// 2.短小實用的語句
#define SAFE_DELETE(p)  {if(p) delete p; p = NULL;}
#define SAFE_RELEASE(p)  {while(p->Release()>0); p = NULL;}

// 3.類的導出的聲明,因為編譯時會報錯,所以先全部注釋掉
//#ifdef MODULE_EXPORTS
//# define MODULE_API __declspec(dllexport)
//#else
//# define MODULE_API __declspec(dllimport)
//#  ifdef _DEBUG
//#   pragma comment(lib, "Moduled.lib")
//#  else
//#   pragma comment(lib, "Module.lib")
//#  endif
//#endif

// 4.一些編譯時的條件語句
#ifndef _WIN32_WINNT            // 指定要求的最低平台是 Windows Vista。
#define _WIN32_WINNT 0x0600     // 將此值更改為相應的值,以適用於 Windows 的其他版本。
#endif


// 5.實用的小函數
// 例如計算某函數的運行時間
#define BEGIN_TIME \
 UINT start = GetTickCount(); 

#define END_TIME(total) \
 total = GetTickCount() - start;\

//當然也可以
#define USE_TIME(used, fuc) \
 UINT begin1 = GetTickCount();\
 fuc;\
 used = GetTickCount() - begin1;\

// 6.定義基類,派生類的接口,這樣可以減少修改量,突出接口 ##表示連接
#define INTERFACE_Creature(terminal) \
 public:        \
 virtual void SetName(const string& strName) ##terminal\
 virtual bool GetName(string &strName) ##terminal

#define BASE_Createture  INTERFACE_Creature(=0;)
#define Divd_Createture  INTERFACE_Creature(;)

class BaseClass
{
 BASE_Createture;
};

class DivdClass : public BaseClass
{
 Divd_Createture;
};

bool DivdClass::GetName(string& strName)
{
 return true;
}

void DivdClass::SetName(const string& strName)
{

}

void Dosth(int time = 500)
{
 Sleep(time);
}

int _tmain(int argc, _TCHAR* argv[])
{
 //1
 double dLength = 50.0;
 if (dLength > MAXHEIGHT)
 {
  // do sth
 }

 //2
 double *p = new double[100];
 SAFE_DELETE(p);

 //3
 //略

 //4
#ifdef DOSTH
 //DO STH
#endif
 
 //5
 int useTime;
//我們可以這樣
 BEGIN_TIME
  Dosth();
 END_TIME(useTime);
//還可以這樣
 USE_TIME(useTime, Dosth())
 printf("Used time is %d\n", useTime);

 //6
 BaseClass *pD = new DivdClass;
 pD->SetName("test");
 SAFE_DELETE(pD); // 學而時習之,不亦說乎
 return 0;
}


 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved