define巨集定義和const常量定義之間的區別
define:定義預編譯時處理的巨集;
只進行簡單的字元替換,無型別檢測
const:定義程式中的常量,編譯時處理;
常量修飾符,把變數定義為常量
typedef:定義型別別名;
例: typedef int A;
則:A a; //定義a為int
inline:定義行內函數。
const定義,大部分編譯器將在編譯的時候進行替換,比如:
const int i=2;
int *p = const_cast<int*>(&i);
*p = 3;
cout<<i;
這裡輸出的還是2,因為在編譯的時候,在cout一句裡,替換了i,為2;
-------------------------------------------------------------
typedef定義,對於複雜的型別,用的比較多,還有就是對於我們便於記憶
如:
typedef int ArrSize;
ArrSize arr;
typedef int(*p)(int) pfun;
pfun mypf;
這裡就定義了一個函式指標
--------------------------------------------------------------------
inline,內斂函式,在執行的時候,不會作為函式處理,也就是不會實際上去做函式呼叫,而是將呼叫處展開
比如:
inline int fun(){cout<<"hello"<<endl;}
呼叫:
fun();
將會展開:
{cout<<"hello"<<endl;}
只適合於簡單的函式,不適合太複雜的函式,因為不進行函式呼叫,所以效率上有所提高,但是,遞迴函式不能作為inline函式
FROM:http://topic.csdn.net/u/20081031/10/53d08ec2-e3a2-4534-b43e-38c53508346c.html
define部分:
巨集不僅可以用來代替常數值,還可以用來代替表示式,甚至是程式碼段。(巨集的功能很強大,但也容易出錯,所以其利弊大小頗有爭議。)
巨集的語法為:
#define 巨集名稱 巨集值
注意,巨集定義不是C或C++嚴格意義上的語句,所以其行末不用加分號結束。
作為一種建議和一種廣大程式設計師共同的習慣,巨集名稱經常使用全部大寫的字母。
利用巨集的優點:
1)讓程式碼更簡潔明瞭
當然,這有賴於你為巨集取一個適當的名字。一般來說,巨集的名字更要注重有明確直觀的意義,有時寧可讓它長點。
2)方便程式碼維護
對巨集的處理,在編譯過程中稱為“預處理”。也就是說在正式編譯前,編譯器必須先將程式碼出現的巨集,用其相應的巨集值替換,這個過程有點你我在文書處理軟體中的查詢替換。所以在程式碼中使用巨集表達常數,歸根結底還是使用了立即數,並沒有明確指定這個量的型別。這容易帶來一些問題,所以C++使用另一更穩妥的方法來代替巨集的這一功能。
const部分
常量定義的格式為:
const 資料型別 常量名 = 常量值;
而const定義的常量具有資料型別,定義資料型別的常量便於編譯器進行資料檢查,使程式可能出現錯誤進行排查。常量必須一開始就指定一個值,然後,在以後的程式碼中,我們不允許改變此常量的值。
兩者之間的區別:
記憶體空間的分配上。define進行巨集定義的時候,不會分配記憶體空間,編譯時會在main函式裡進行替換,只是單純的替換,不會進行任何檢查,比如型別,語句結構等,即巨集定義常量只是純粹的置放關係,如#define null 0;編譯器在遇到null時總是用0代替null它沒有資料型別(還有疑問請找C語言書籍看預處理部分或者看MSDN.而const定義的常量具有資料型別,定義資料型別的常量便於編譯器進行資料檢查,使程式可能出現錯誤進行排查,所以const與define之間的區別在於const定義常量排除了程式之間的不安全性.
from:http://www.phpweblog.net/maple094/archive/2008/05/30/4054.html
相關文章
- PHP 定義常量 define 和 const的區別PHP
- [PHP]常量定義: const和define區別和運用; 附constant解釋PHP
- sqlplus中define定義的常量和variable定義的變數的區別!SQL變數
- C++巨集定義#defineC++
- 巨集定義和列舉型別的區別型別
- C++中巨集定義#define的用法C++
- 059.Define 巨集定義的巢狀巢狀
- php定義常量方法的區別PHP
- c 語言中巨集定義和定義全域性變數的區別變數
- pch檔案的使用, 標頭檔案使用, 常量(const)的定義,以及一些常用的巨集定義
- vue 常量定義和使用Vue
- C 語言巨集定義 #define 的理解與資料整理
- 宏定義define的用法
- C語言巨集定義中#define中的井號#的使用C語言
- const、define 和 static 的區別
- Swift 裡的巨集定義Swift
- iOS常用巨集定義iOS
- php變數的型別是如何轉換的?常量如何定義?系統常量是如何定義的?PHP變數型別
- ios開發的巨集定義iOS
- C語言(巨集定義)C語言
- JavaScript 常量定義詳解JavaScript
- vue常量定義以及使用Vue
- C語言中const和#define的區別C語言
- C/C++定義全域性變數/常量幾種方法的區別C++變數
- SAP UI5和angular裡的常量定義UIAngular
- COM、COM+和DCOM的定義和區別
- 使用ant巨集定義任務
- VC++實用巨集定義C++
- 前端如何定義一個常量前端
- shell 中怎麼定義常量
- CSS中定義CLASS時,中間有空格和沒空格的區別CSS
- Linux2.6.14.3核心中宏定義 #define DEFINE(轉)Linux
- iOS 官方巨集定義 - “引入”、“廢棄”iOS
- iOS 通用巨集定義 高效全域性巨集彙總iOS
- php中const和define有什麼區別PHP
- C語言巨集定義##連線符和#符的使用C語言
- WM Define Storage Type Indicators定義儲存型別識別符號(八)Indicator型別符號
- CUJ:標準庫:定義iterator和const iterator (轉)