c define預處理和const常量修飾的作用有什麼區別

時間 2022-07-24 08:55:02

1樓:匿名使用者

用define是告訴編譯器,這個是個符號,在預處理的時候,把**裡的asize全換成4,再繼續編譯工作。asize編譯完之後,在可執行程式中是完全沒有體現的,只是寫**的時候更清晰而已。

用const是告訴編譯器,這是個變數,將來在記憶體裡佔據一個整數型別的空間,它的值是6。只不過,這個是const,我不想在**的某個地方改變它(比如直接賦值,,或者++/--)。這樣編譯器在編譯的時候就會注意**裡如果有這樣的語句,就報個錯。

但是它不能阻止用其他方式改變它的值,比如:

int * p = &asize;

*p = 5;

差別還是挺大的。

2樓:計算機

#define 是預處理,在程式執行時進行替換,const是用來定義一個常量。

define巨集定義和const常量定義之間的區別

3樓:匿名使用者

1.define是巨集定義,程式在預處理階段將用define定義的內容進行了替換。因此程式執行時,常量表中並沒有用define定義的常量,系統不為它分配記憶體。

const定義的常量,在程式執行時在常量表中,系統為它分配記憶體。

2.define定義的常量,預處理時只是直接進行了替換。所以編譯時不能進行資料型別檢驗。

const定義的常量,在編譯時進行嚴格的型別檢驗,可以避免出錯。

3.define定義表示式時要注意「邊緣效應」,例如如下定義:

#define n 2+3 //我們預想的n值是5,我們這樣使用nint a = n/2; //我們預想的a的值是2.5,可實際上a的值是3.5

c或c#中define和const的區別

4樓:匿名使用者

define預定義,只是符號,肯定不佔記憶體,它的作用只是把一串字元用一個符號表示,在編譯的時候已經處理了。const是常量,肯定要分配記憶體

5樓:匿名使用者

define說白了,它的作用只是查詢替換的功能,const是一個常量的定義,用const的除非你用指標強改它,不然會報錯的!

6樓:匿名使用者

const是常量, 系統要分配記憶體來儲存這個常量的值而且下面的**如果要嘗試修改這個值, 會報錯的

const和define的區別

7樓:匿名使用者

define巨集定義和const常變數區別:

1.define是巨集定義,程式在預處理階段將用define定義的內容進行了替換。因此程式執行時,常量表中並沒有用define定義的常量,系統不為它分配記憶體。

const定義的常量,在程式執行時在常量表中,系統為它分配記憶體。

2.define定義的常量,預處理時只是直接進行了替換。所以編譯時不能進行資料型別檢驗。

const定義的常量,在編譯時進行嚴格的型別檢驗,可以避免出錯。

3.define定義表示式時要注意「邊緣效應」,例如如下定義:

#define n 2+3 //我們預想的n值是5,我們這樣使用nint a = n/2; //我們預想的a的值是2.5,可實際上a的值是3.5

8樓:匿名使用者

如果就單單定義常量說的話:

1. const 定義的常數是變數 也帶型別

2. #define 定義的只是個常數 不帶型別。

9樓:銀馳陳慕

舉個例子吧。。。

如果是#define

aaa3+5

那麼表達

式2*aaa*3就相當於2*3+5*3,結果是6+15=21如果是const

intaaa

=3+5

那麼表示式2*aaa*3就相當於2*8*3,結果是48

c語言中const修飾的到底是常量還是變數?

c或c#中define和const的區別

10樓:匿名使用者

#define 就是一個巨集替換過程,不用開闢記憶體空間

const 定義了變數 要佔記憶體空間

11樓:匿名使用者

(1) 編譯器處理方式不同

define巨集是在預處理階段。

const常量是編譯執行階段使用。

(2) 型別和安全檢查不同

define巨集沒有型別,不做任何型別檢查,僅僅是。

const常量有具體的型別,在編譯階段會執行型別檢查。

(3) 儲存方式不同

define巨集僅僅是,有多少地方使用,就多少次,不會分配記憶體。(巨集定義不分配記憶體,變數定義分配記憶體。)const常量會在記憶體中分配(可以是堆中也可以是棧中)。

(4)const 可以節省空間,避免不必要的記憶體分配。

(5) 提高了效率。 編譯器通常不為普通const常量分配儲存空間,而是將它們儲存在符號表中,這使得它成為一個編譯期間的常量,沒有了儲存與讀記憶體的操作,使得它的效率也很高。

(6) 巨集替換隻作替換,不做計算,不做表示式求解;巨集預編譯時就替換了,程式執行時,並不分配記憶體。

12樓:漫天大少

#define有個致命的缺陷,不受作用域限制。凡是在#define之後的**,都可以直接使用#define定義的數值。

在不涉及到條件編譯,並且只是使用固定值的前提下,我們都應該用const來替代#define。

13樓:匿名使用者

14樓:匿名使用者

const 能指明型別,但是define不能,這能減少不必要的麻煩~~

全域性變數和const定義

15樓:種燒餅的怪叔叔

1)預處理命令(#define)不能在任何函式體宣告(包括main函式)

2)const和#define的區別,本質來說,一個是左值一個是右值。右值就是記憶體實際沒有分配儲存空間的值,另一說法是右值顧名思義就是能把值賦給別人,但是不能被賦值,例如a=3;其中3是右值,但是3=a;就是非法的,因為右值不能被賦值。const是左值值, #define出來的是右值.

至於前面說的檢測計算機是否給他分配了記憶體,只需要用指標測試一下就行了,例如:

#define element_1;

const int element_2;

int main()

16樓:

#define的不是全域性變數,而是編譯前的文字替換。

如果#define pi 3.14,那麼編譯前會把**下文中的所有pi識別符號都替換成3.14。

(注意是替換識別符號,把pi替換成3.14,並不會把pitty替換成3.14tty)。

因為是替換下文中的pi,所以上文中仍然不能用pi。

17樓:匿名使用者

1、在函式之外定義的變數稱為外部變數,外部變數是全域性變數(也稱全程變數)。 全域性變數可以為本函式和其他函式所共用。

2、const(常型別)是指使用型別修飾符const說明的型別,用常型別定義的變數或物件的值是不能被改變的。

3、全域性變數和const沒有必然的聯絡,當然你可定義全域性const型別,是否為全域性變數決定於變數出現的位置。

const 比#define有什麼優點

18樓:jaior俊逸

const作用:定義常量、修飾函式引數、修飾函式返回值三個作用。被const修飾的東西都受到強制保護,可以預防意外的變動,能提高程式的健壯性。

1)const常量有資料型別,而巨集常量沒有資料型別。編譯器可以對前者進行型別安全檢查。而對#define只進行字元替換,沒有型別安全檢查,並且在字元替換可能會產生意料不到的錯誤。

2)有些整合化的除錯工具可以對const常量進行除錯,但是不能對巨集常量進行除錯。

19樓:匿名使用者

1) const 常量有資料型別,而巨集常量沒有資料型別。編譯器可以對前者進行型別安全檢查。而對後者只進行字元替換,沒有型別安全檢查,並且在字元替換可能會產生意料不到的錯誤。

2) 有些整合化的除錯工具可以對const 常量進行除錯,但是不能對巨集常量進行除錯。

c語言中const有什麼用途

20樓:靠名真tm難起

可以定義const常量,具有不可變性。

例如:const int max=100; max++會產生錯誤;

便於進行型別檢查,使編譯器對處理內容有更多瞭解,消除了一些隱患。

例如: void f(const int i) 編譯器就會知道i是一個常量,不允許修改;

可以避免意義模糊的數字出現,同樣可以很方便地進行引數的調整和修改。 同巨集定義一樣,可以做到不變則已,一變都變!

如(1)中,如果想修改max的內容,只需要它修改成:const int max=you want;即可!

可以保護被修飾的東西,防止意外的修改,增強程式的健壯性。 還是上面的例子,如果在函式體內修改了i,編譯器就會報錯;

例如: void f(const int i)

可以節省空間,避免不必要的記憶體分配。 例如:

#define pi 3.14159 //常量巨集

const double pi=3.14159; //此時並未將pi放入ram中 ......

double i=pi; //此時為pi分配記憶體,以後不再分配!

double i=pi; //編譯期間進行巨集替換,分配記憶體

double j=pi; //沒有記憶體分配

double j=pi; //再進行巨集替換,又一次分配記憶體!

const定義常量從彙編的角度來看,只是給出了對應的記憶體地址,而不是像#define一樣給出的是立即數,所以,const定義的常量在程式執行過程中只有一份拷貝,而#define定義的常量在記憶體中有若干份拷貝。

6. 提高了效率。

編譯器通常不為普通const常量分配儲存空間,而是將它們儲存在符號表中,這使得它成為一個編譯期間的常量,沒有了儲存與讀記憶體的操作,使得它的效率也很高。

擴充套件資料:const是一個c語言(ansi c)的關鍵字,具有著舉足輕重的地位。它限定一個變數不允許被改變,產生靜態作用。

使用const在一定程度上可以提高程式的安全性和可靠性。另外,在**別人**的時候,清晰理解const所起的作用,對理解對方的程式也有一定幫助。另外const在其它程式語言中也有出現,例如pascal、c++、php5、b#.

net、hc08 c、c#等。

21樓:天雲一號

const修飾的資料型別是指常型別,常型別的變數或物件的值是不能被更新的。

const關鍵字的作用主要有以下幾點:

(1)可以定義const常量,具有不可變性。 例如:

const int max=100; int array[max];

(2)便於進行型別檢查,使編譯器對處理內容有更多瞭解,消除了一些隱患。例如: void f(const int i) 編譯器就會知道i是一個常量,不允許修改;

(3)可以避免意義模糊的數字出現,同樣可以很方便地進行引數的調整和修改。

(4)可以保護被修飾的東西,防止意外的修改,增強程式的健壯性。 還是上面的例子,如果在函式體內修改了i,編譯器就會報錯; 例如:

void f(const int i)

(5) 為函式過載提供了一個參考。

class a //一個函式

void f(int i) const //上一個函式的過載 ......

}; (6) 可以節省空間,避免不必要的記憶體分配。 例如:

#define pi 3.14159 //常量巨集

const doulbe pi=3.14159; //此時並未將pi放入rom中 ......

double i=pi; //此時為pi分配記憶體,以後不再分配!

double i=pi; //編譯期間進行巨集替換,分配記憶體

double j=pi; //沒有記憶體分配

double j=pi; //再進行巨集替換,又一次分配記憶體!

const定義常量從彙編的角度來看,只是給出了對應的記憶體地址,而不是象#define一樣給出的是立即數,所以,const定義的常量在程式執行過程中只有一份拷貝,而#define定義的常量在記憶體中有若干個拷貝。

(7) 提高了效率。 編譯器通常不為普通const常量分配儲存空間,而是將它們儲存在符號表中,這使得它成為一個編譯期間的常量,沒有了儲存與讀記憶體的操作,使得它的效率也很高。

設有預處理命令define d 2和定義int a 10 long b 20 char a

小菜呀小菜 預處理的意思是把 中所有的d替換成2,所有d選項最終會變成2 所以是錯誤的。至於c,這個涉及資料的型別轉化,char會隱式的轉化成int進行計算再轉化成char。參考 d是錯誤的,選d。因為d是常數,不可做左值。有以下定義int a 0 double b 1.25 char c a de...

C語言 預處理命令中關於檔案包含問題

建立檔案時,選擇標頭檔案選項。寫法可參照等標頭檔案。以後使用時,用include包含進去即可。新建個檔案命名為啥啥啥。h,把你的 copy進去,然後把這個檔案扔進vc的include路徑去,這個路徑和你安裝的有關,可以在工程設定中找到,找不到你就搜尋一下,和它放在一起。新建一個標頭檔案如。加上這些巨...

純淨水裝置原水預處理是如何進行的

1.機械過濾器 採用多次過濾層的過濾器,主要目的是去除原水中含有的泥沙 鐵鏽 膠體物質 懸浮物等顆粒在20um以上的物質,系統可以進行反衝洗 正沖洗等一系列操作。2 活性炭過濾器 採用活性炭過濾器,活性炭不但可吸附電解質離子,還可以進行離子交換吸附。經活性炭吸附還可使高錳酸鉀耗氧量 cod 由15m...