const變數與define定義常量的區別

2021-09-06 13:02:06 字數 1306 閱讀 7565

一、概念性區別

const 變數就是在普通變數前邊加上乙個關鍵字const,它賦值的唯一機會就是「定義時」,此變數不能被程式修改,儲存在rodata區。

define定義的是常量,不是變數,所以編譯器就不會給define定義的巨集名字分配儲存單元。通常來說,編譯器對常量的處理方式是嵌入到**中,以立即數的方式出現。

二、測試

1、const測試

const測試程式

#include 

#include 

const

char ch = 

'a';

int main()

反彙編

disassembly of section .rodata:

00000000:

0: 00000061 andeq r0, r0, r1, rrx

2、define測試

define測試程式 

#include 

#include 

#define ch 'a'

int main()

反彙編00000000:

0:    e1a0c00d     mov    ip, sp

4:    e92dd800     s***b    sp!, 

8:    e24cb004     sub    fp, ip, #

4    ; 

0x4c:    e24dd004     sub    sp, sp, #

4    ; 

0x410:    e3a03005     mov    r3, #

5    ; 

0x514:    e50b3010     str    r3, [fp, #-

16]18:    e59f000c     ldr    r0, [pc, #

12]    ; 2c <.text+

0x2c>

1c:    e3a01061    

mov    r1, #

97; 

0x61

20:    ebfffffe     bl    

200x20>

24:    e1a00003     mov    r0, r3

28:    e89da808     ldmia    sp, 

2c:    

00000000     andeq    r0, r0, r0

define與const的區別

define 定義的其實是乙個字面常量的名字,在程式中可以把這個名字等價於字面常量使用,在編譯時會被編譯器替換為該字面常量。使用這種方式,只能達到提高程式可讀性的效果,但是安全性不能得到保證。從const 語句的語法格式可以看出,const 語句支援為常量指定型別,編譯器在編譯 時將其型別進行安全檢...

const 與 define的區別

在c程式中,const的用法主要有定義常量 修飾函式引數 修飾函式返回值等3個用處 在c 程式中,它還可以修飾函式的定義體,定義類中某個成員函式為恆態函式,即不改變類中的資料成員 1 const 有資料型別,而巨集沒有資料型別,編譯器可以對前者進行型別安全檢查,而對後者只進行字元替換,沒有型別安全檢...

const常量與 define巨集

define 巨集定義語句 在預處理階段直接做文字替換,不做型別檢查。const c 1 處理時間不同 define所定義的巨集變數在預編譯 預處理 的時候進行替換,const 變數在編譯時確定其值。2 對於 const 變數,系統只在其定義時分配一段記憶體空間,而 define 則是給出了乙個立即...