日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

#define const typedef

發布時間:2024/4/15 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 #define const typedef 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

#define用法

1. 定義簡單的常數:定義常量,便于修改

#define N 1000

2.?定義簡單的函數:注意多使用括號

define可以像函數那樣接受一些參數,如下:

#define max(x,y) (x)>(y)?(x):(y)

這個定義就將返回兩個數中較大的那個,看到了嗎?因為這個“函數”沒有類型檢查,就好像一個函數模板似的,當然,它絕對沒有模板那么安全就是了。可以作為一個簡單的模板來使用而已。但是這樣做的話存在隱患,例子如下:

#define Add(a,b) a+b;

在一般使用的時候是沒有問題的,但是如果遇到如:c * Add(a,b) * d的時候就會出現問題,代數式的本意是a+b然后去和c,d相乘,但是因為使用了define(它只是一個簡單的替換),所以式子實際上變成了

c*a + b*d

?

const常量與define宏定義的區別

編譯器處理方式不同:

define宏是在預處理階段展開。const常量是編譯運行階段使用。

類型和安全檢查不同:

define宏沒有類型,不做任何類型檢查,僅僅是展開。const常量有具體的類型,在編譯階段會執行類型檢查。

存儲方式不同:

define宏僅僅是展開,有多少地方使用,就展開多少次,不會分配內存。

const常量會在內存中分配(可以是堆中也可以是棧中)。

?

C++的const比C語言#define更好的原因?

首先,它能夠明確指定類型,有類型檢查功能。

其次,可以使用C++的作用域規則將定義限制在特定的函數或文件中。

第三,可以將const用于更復雜的類型,比如數組和結構。

C語言中也有const,其與C++中const的區別是:一是作用域規則不同;另一個是,在C++中可以用const值來聲明數組長度。C編譯器不能把const看成一個編譯期間的常量,即C編譯器不知道它在編譯時的值。

===========================================================

對宏定義的使用要非常小心,特別要注意兩個問題:

(1)謹慎地將宏定義中的“參數”和整個宏用括弧括起來。如定義最小宏:#define MIN(A,B) ( (A) <= (B) ? (A) : (B) ) ,所以,嚴格地講,下述解答:

#define MIN(A,B) (A) <= (B) ? (A) : (B) // #define MIN(A,B) (A <= B ? A : B ) 都應判0分;

(2)防止宏的副作用。對MIN(*p++, b)的作用結果是:((*p++) <= (b) ? (*p++) : (*p++)) ,這個表達式會產生副作用,指針p會作三次++自增操作。

?

typedef用法

簡化復雜的類型聲明

簡化復雜的類型聲明,或給已有類型起一含義明確的別名;如:

typedef?bool?(*FuncPointer)(int,?double); //聲明了一個返回?bool?類型并帶有兩個(int和double)形參的函數的指針類型FuncPointer

FuncPointer?pFunc; //聲明了一個FuncPointer類型的函數指針對象pFunc

定義與平臺無關的類型

定義與平臺無關的類型,屏蔽不同平臺的類型差異化;如:

用typedef來定義與平臺無關的類型。

比如定義一個叫?REAL?的浮點類型,在目標平臺一上,讓它表示最高精度的類型為:

typedef?long?double?REAL;

在不支持?long?double?的平臺二上,改為:

typedef?double?REAL;

在連?double?都不支持的平臺三上,改為:

typedef?float?REAL;

也就是說,當跨平臺時,只要改下?typedef?本身就行,不用對其他源碼做任何修改。

標準庫就廣泛使用了這個技巧,比如size_t。另外,因為typedef是定義了一種類型的新別名,不是簡單的字符串替換,所以它比宏來得穩健。

與struct的結合使用

在C++中,struct與class的作用相同,就是默認的訪問權限不同,struct默認為public,而class默認為private的。

但是在C語言中,struct的定義和聲明要用typedef。如果沒有typedef就必須用struct?Person?person;來聲明

?

typedef與#define的區別

執行時間不同

關鍵字typedef在編譯階段有效,由于是在編譯階段,因此typedef有類型檢查的功能。

#define則是宏定義,發生在預處理階段,也就是編譯之前,它只進行簡單而機械的字符串替換,而不進行任何檢查。

功能有差異

typedef用來定義類型的別名,定義與平臺無關的數據類型,與struct的結合使用等。

#define不只是可以為類型取別名,還可以定義常量、變量、編譯開關等。

作用域不同

#define沒有作用域的限制,只要是之前預定義過的宏,在以后的程序中都可以使用。

而typedef有自己的作用域。

參考:http://blog.csdn.net/luoweifu/article/details/41630195

?

轉載于:https://www.cnblogs.com/raichen/p/5837377.html

總結

以上是生活随笔為你收集整理的#define const typedef的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。