一、概念性區別
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 則是給出了乙個立即...