1樓:匿名使用者
define 本質上相當於 字串替換 ,也就是替換你**裡的文字因此它本身是沒有任何型別的,可以是數字 可以是單詞 等等比如#define aaa 5
那麼 當你這麼使用時
int a= aaa ;
就相當於定義了乙個數字.
而你要是
#define aaa tom
int tom,jerry;
jerry=aaa;
這又相當於 定義了乙個單詞(識別符號),等價於jerry=tom;
所以 ,define 和型別沒啥關係, 他就是相當於替換**
2樓:孟羽然
#define是巨集定義,而不是變數定義。
說白了,它只是起到乙個簡單的文字替換的作用,僅僅在編譯時進行文字替換。等編譯完成以後,巨集就不存在了。
所以,#define和變數型別沒有任何關係,你定義成什麼內容都可以。甚至可以定義一段**、乙個函式……
例如:#define a 1000
#define b "helloworld"
#define c 'c'
#define d 3.1415
#define max(x,y) ((x)>(y)?(x):(y))
#define log(msg) fprintf(stderr, "%s\n", msg);
#define list(folder) myfile *f = get_file_list(folder); \
while (f != null) \
3樓:匿名使用者
可以,#define只是在編譯時的替換,啥都可以定義,資料,字串,函式,識別符號
c++ 中define(巨集定義) 各種用法(含特殊),小舉個例子,謝謝!
4樓:會飛的小兔子
1、define是巨集定義,程式在預處理階段將用define定義的內容進行了替換。因此在程式執行時,常量表中並沒有用define定義的常量,系統不為它分配記憶體。而const定義的常量,在程式執行時,存在常量表中,且系統為它分配記憶體。
2、define定義的常量,預處理時只是直接進行了替換,因此在編譯時不能進行資料型別檢驗。而const定義的常量,在編譯時進行嚴格的型別檢驗,可以避免出錯。
3、define定義表示式時要注意「邊緣效應」。
例如:#definen1+2;
floata=n/2.0;
按照常規做法,可能會認為結果是3/2=1.5;
但是實際上,結果應該為1+2/2.0=2.0;
若想要實現3/2,則#definen(1+2);
即為避免邊緣效應,一定要加括號。
擴充套件資料c++巨集定義
#define命令是c++語言中的乙個巨集定義命令,它用來將乙個識別符號定義為乙個字串,該識別符號被稱為巨集名,被定義的字串稱為替換文字。
1、簡單的巨集定義:
#define 《巨集名》 《字串》
例: #define pi 3.14159262、帶引數的巨集定義
#define 《巨集名》 (《參數列》) 《巨集體》
例: #define a(x) x
5樓:湖人總冠軍
1、define是巨集定義,在預處理階段,程式將替換define定義的內容,因此,當程式執行時,常量表中沒有用define定義的常量,系統不會為它分配記憶體,當程式執行時,const定義的常量存在於常量表中,並且系統為它分配記憶體。
2、define定義的常量,只在預處理期間直接替換,因此在編譯期間無法執行資料型別驗證,對於const定義的常量,在編譯時進行嚴格的型別檢查可以避免錯誤。
3、define定義表示式時要注意「邊緣效應」。
例如:#definen1+2;
floata=n/2.0;
按慣例,可認為結果為3/2=1.5;
但實際上,結果應該是1+2/2.0=2.0;
如果你想達到3/2,定義(1+2);
為了避免邊緣效應,必須加括號。
c++中.const 與#define都是定義全域性變數的嗎?
6樓:匿名使用者
#define只是預編譯指令,也就是在編譯器編譯之前,會把**裡面除了""中的pi外的pi都變成內3.1415926,也就
是說,編譯容器是看不到pi這個符號的。
而const定義是帶有型別的,定義的是變數,它有實際記憶體,只是這個記憶體是不可以更改的。
所以從c++中提倡使用const變數,而不用#define
7樓:匿名使用者
const和#define是否定義全域性變數,要看他們所處的位置,如果位於main主函式外面,則為全域性變數,否則為區域性變數
8樓:
#define是巨集定義 一般時候最好不要用
c++中用#define遇到的問題
9樓:丶
一般在標頭檔案中寫#ifndef,防止重定義。
你可以在class.h中寫:
#ifndef _class_h_
#define _class_h_
//下面是類的定義
//····
#endif
然後在其他檔案中包含標頭檔案#include"class.h",這樣能保證class.h的內容只編譯一次
10樓:不見彩虹多年
首先,你的#endif在哪?應該在main函式後面。而#include"class.h"是在#ifndef _class_h_
...#endif中間、所以需要在#ifndef _class_h_前面增加#define _class_h_
c++ define時最大能定義多大的數字? 比如: #define n 65536 會溢位,有什麼辦法解決
11樓:匿名使用者
#define n 65536
只是將後面**出現n的地方替換成後面的數字,defind不存在資料型別的問題。
如果溢位,說明你後面的變數型別的取值範圍太小。如果原來用的是short,改成int或者long即可。
c語言中可不可以用變數定義陣列的個數
可以使用mallo函式 mallo函式返回的實際是乙個無型別指標,必須在其前面加上指標型別強制轉換才可以使用 指標自身 指標型別 malloc sizeof 指標型別 資料數量 int p null intn 10 p int malloc sizeof int n 擴充套件資料 mallo函式使用...
C 怎樣使用變數定義二維陣列,C 中怎麼用new函式定義乙個二維陣列?
1.定義m m的陣列。int m,p p new int m 2.定義n m的陣列 int n int p 2 new int n 2 此處的2不能是變數 3.定義n m的二維陣列 float tt new float n for int i 0 i float m float tt new flo...
c程式中2的20次方可以用220表示嗎
不可以用 表示乘方,在c語言中,表示位異或,是乙個位操作符,在c語言中用math.h中宣告的pow 函式計算乘方 pow 2,20 可以計算2的20次方 不能這樣表示的,2 20應該用乙個庫函式pow 它的表示方式是 比如 x y表示為 pow x,y 但是要注意的是,在這裡x,y還有最後的值都應應...
下面這句話中為什麼用knowing?可以用to know嗎
樓主這是糾結動名詞和動詞不定式引導定語從句的區別,其實我也挺糾結的。不定式作定語要放在它所修飾的名詞之後,表示乙個將來的動作,即不定式的動作發生在謂語之後,而動名詞做定語時,和它修飾的名詞之間有邏輯上的主謂關係,應該是主動關係,被動的話用過去分詞。所以我覺得這裡用knowing更合適。為什麼下面這句...
索愛k700c的電池可以用幾天
是呀,我用的也是這款機子呀,什麼都還可以,就是挺費電的呀,我這兩天下了乙個新遊戲,一直玩,1天不到就沒電了,還好是兩塊電池!還有個東東是我在網上看到的不知對不對 電池只能用一天 解決方案 用完電池自帶的電量後,首次充電充6 8小時,不能超過8小時,會保持電池的最大容量,一般情況下,待機可以2 3天 ...