c語言中為什麼字面常量與巨集定義不佔記憶體空間

時間 2021-08-30 10:26:31

1樓:yesyes科

因為巨集在預處理階段就會被替換掉,到了編譯的階段是沒有巨集存在的,它自然到不了可執行檔案中,所以它不佔記憶體空間。字面常量,佔不佔空間要看情況。使用方式如下:

1、首先新建乙個工程和.c檔案,輸入標頭檔案、主函式和巨集定義。

2、然後定義變數型別。

3、接著輸入引數的值。

4、然後呼叫巨集。

5、接著輸出。

6、最後編譯、執行就完成了。

2樓:

巨集定義不佔記憶體空間,因為巨集在預處理階段就會被替換掉,到了編譯的階段是沒有巨集存在的,它自然到不了可執行檔案中,所以它不佔記憶體空間。

字面常量,佔不佔空間要看情況,我不知道c語言標準中是否對此事作出規定,我就談談gcc的處理方法吧,這個設計彙編的問題。

int a;

a = 5;

將這段反彙編,得到

可以看到,5是以立即數的形式出現的,所以它不佔記憶體。

然後再將a定義為float:

float a;

a = 5.0;

可以看到,程式的最後定義了5.0的單精度浮點表示,然後將其傳入eax暫存器,再賦值給a。

另外,字元常量不佔記憶體空間,字串常量佔記憶體空間。總之,整形常量是不佔空間的,其他佔。

c語言中常量定義和巨集定義有什麼區別?

3樓:劉文正粉絲

區別大了個去了.

巨集定義是預處理命令.

#defien a 3

執行後, 預處理器把會正文所有全字匹配的a, 全部替換為3,那麼, 最後的**進入編譯器的**,

1 + a, 是變成1 + 3的.

而const int a = 3;

這個是不在預處理器的管理範圍之內 ,這個就是編譯器的工作了, 有些編譯器不會為它分配空間, 直接把它加入符號表中, 也就是說, 常量不再是0123456789這10個數, 而是0123456789a這11個數, 那麼a就是被定義成3了, 所以符號表裡的內容是01234567893.

而有些 編譯器會為它分配空間.

你不知道它們的區別, 說明你學巨集的時候, 並不知道巨集的原理.

4樓:金色潛鳥

巨集定義 是編譯前的預處理。

#define a 3 是在程式正式編譯前,做 token a 的字串替代,凡 token a 都用 3替代, 替代完了再開始編譯。

const int a = 3; 是 變數宣告和初始化。只是強調了 a 是 常量,不能用來做 「左值」,即,數值不能改變。

5樓:匿名使用者

符號常量 #define pi 3.1415926f;

常值變數 const float pi 3.1415926f;

網頁鏈結

c語言中為什麼用巨集定義乙個字元常量(乙個字母)可以賦值給字元變數,

6樓:匿名使用者

1、因為巨集定義實質是一種替換,雖然看起來是字元,實際上最終是被替換成其他常熟或者值。

2、巨集定義中的識別符號都採用大寫,這是程式設計中一種約定俗成的習慣:

1)巨集替換不做語法檢查,所以在使用的時候要格外小心2)巨集替換通常在檔案開頭部分,寫在函式的花括號外邊,作用域為其後的程式,直到用 問好

3)# u n d e f 命令終止巨集定義的作用域4)不要在字串中使用巨集,如果巨集名出現在字串中,那麼將按字串進行處理.

7樓:匿名使用者

因為巨集是乙個簡單替換,所以c語言中用巨集定義乙個字元常量(乙個字母)可以賦值給字元變數。實質是在編譯之前會把巨集替換掉,然後再編譯。

例如:#define  a    5

void main()

在編譯之前a已經被替換成5了,所以就可以賦值給num。

8樓:匿名使用者

漢字根據編碼方式不同,所佔的大小2~4個位元組不等,漢字賦值給字元變數,只顯示第乙個位元組,出問號就不奇怪了

用漢字賦值給字元數陣列然後在顯示的話,一定要考慮編碼方式問題,你的終端支援哪種就選擇哪種,否則亂碼

9樓:匿名使用者

#define namehello "wendy"

#include

#include

void main()

10樓:匿名使用者

c裡面不支援漢子,你用vc++6.0試試,那個可以顯示漢子

c語言中為什麼用#define定義符號常量 5

11樓:baby魏栓寶

#define(即巨集定義)是在程式預編譯時執行替換功能,作用是加快程式執行速度,減少記憶體空間開銷

12樓:匿名使用者

使用方便 而且便於平台見的移植

13樓:刁如雲顏偲

應該是c。首先肯定把pi定義成常量,排除d;因為在之後的程式裡可以直接用pi來進行計算,符號和字元不能直接計算,所以選c

c語言中巨集定義的define和typedef的區別是什麼

1 define是預處理指令,在編譯預處理時進行簡單的替換,不作正確性檢查,不關含義是否正確照樣帶入,只有在編譯已被的源程式時才會發現可能的錯誤並報錯。例如 define pi 3.1415926 程式中的 area pi r r 會替換為3.1415926 r r 如果你把 define語句中的數...

c語言中define巨集定義和變數定義的聯絡和區別

巨集定義是全域性性的,變數定義是區域性性的, 巨集定義主要在預處理階段完成,由前處理器進行字元替換,變數定義則會在記憶體中為變數分配地址。 吉檀迦利 define巨集定義的量是做常量處理的,如 define price 30,下文只要遇到price就代表常量30,他與變數的區別之一是在書出語句中pr...

C語言多次賦值問題,C語言中使用巨集定義多次賦值的問題

項成郟卯 a正確顯然,b正確n2 n3直接截斷小數部分返回一個整數,c正確,賦值語句是左優先順序的,這個語句先把j賦給i,再把i賦給k,d是不正確的,和c類似,不過第一次賦值,b c 1,賦值語句的左側是變數,不能是一個表示式, 鍾全婁卯 如果要達到原來的效果,就不可能寫成後面的形式。s a i a...