符號常量的優點

2021-09-17 22:09:02 字數 2091 閱讀 5467

符號常量是乙個常量,是不變數,所以,在編譯的時候,就把符號常量出現的地方,替換為符號常量對應的常量。符號常量一般使用者定義乙個全域性使用的資料,而且要改變該資料的時候,只需要改變符號常量的值,**中引用符號常量的地方,都會把值相應修改過來。如下是乙個測試的例子。

#include

//包含標頭檔案

, 為了使用

printf()函式;

#define

a100                  

//定義符號常量

a, 代表

100數值;

#define

name

'c'//

定義符號常量

name,

代表字元

'c'

intmain()                          

//定義程式的主函式

, 就是程式的入口位址;

//主函式的結束標記;

程式的執行結果如下:

mylinux@ubuntu:~/src/test$ gcc test.c -o exe

mylinux@ubuntu:~/src/test$ ./exe

a = 100

x = 100, y = 200, z = 300

可以看到,x, y, z 變數的值,相差100,這個100就是符號常量a的值。那麼,如果我們想設定x, y, z 變數的值相差500,我們只需要修改符號常量a的定義為:

#define a 500

那麼,在編譯**的時候,就把符號常量a出現的地方,使用500這個數值來代替,所以,就有:

x = 500;

y = x + 500;

z = y + 500;

所以,符號常量的乙個優點是:修改符號常量的值,在**中所有引用符號常量的地方,都相應引用修改後的符號常量值。

下面講解乙個知識點,初學者可以跳過。當學習了if選擇語句和預編譯之後,才可以理解該知識點的講解。

符號常量還有乙個很大的優點,就是「選擇性編譯**」,因為符號常量是在編譯的時候,把符號常量替換為它代表的值。所以,配合#if巨集編譯,可以選擇編譯某些**。例如,我們開發乙個程式,要求相容linux和windows作業系統平台的執行,那麼,就需要在編譯**的時候,選擇編譯linux系統下的**還是windows系統下的**。如下是乙個測試的例子。

#include

//包含標頭檔案

, 為了使用

printf()函式;

#define

sys_linux

1          

//定義符號常量

sys_linux

代表數值1;

intmain()                          

//定義程式的主函式

, 就是程式的入口位址;

//主函式的結束標記;

程式執行結果如下:

mylinux@ubuntu:~/src/test$ gcc test.c -o exe

mylinux@ubuntu:~/src/test$ ./exe

linux system!

可以看到,我們定義了符號常量sys_linux,它代表的常量值是1。所以,在 #if 預編譯條件中,就是 #if 1 成立,所以,執行linux系統下的**:

printf("linux system!\n");

那麼,當我們想編譯該系統在windows操心系統下執行的時候,就是需要編譯windows系統下的**,所以,可以修改符號常量的定義為:

#define sys_linux 0

此時,#if 0 成立,執行 #else 後面的**。所以,通過配置sys_linux 符號常量的值為零和非零,我們可以定義編譯器選擇編譯linux系統下的**還是windows系統下的**。

針對這個問題,我們可以更深入地思考:如果我們要編譯該程式在linux系統下執行,也要編譯它在windows系統下執行,就是需要編譯兩個版本。那麼,每次編譯的時候,都要去修改sys_linux符號常量的值,這樣確實很不方便!

那麼,gcc在編譯**的時候,可以指定符號常量的值。在這裡我們介紹gcc在編譯的時候,怎麼樣設定符號常量的值,就是通過-d選型來定義。如下是乙個測試例子。

常量與符號常量

通過 數學中的變數與常量 章節的介紹,我們知道了常量的定義,就是其資料不可以修改的量。例如100這個數值,它的數值就是100,不可以改變,所以,稱為常量,可以稱為 常量100。那麼,在c語言中定義的資料報括有數值 整數,浮點數 字元等等。其內容不可改變的量,就稱為常量,有 100,20,30 這樣的...

C 變數 常量 符號常量

變數 int i 0 i 是變數 i 5 i 可以修改 變數就是程式內乙個記憶體位置的符號名,在該記憶體位置可以儲存資料,並可以通過符號名對該記憶體位址存放的資料進行訪問。變數的值可以修改,是可變的,但在某個確定的時刻,變數的值是確定的,並一直保持到下次被修改之前。常量 int a 10 a 是變數...

常量符號定義

1 特點 編譯時符號所在的位置就會替換為它代表的常量 2 偽指令 2.1 語法 name expreion 2.1.1 expression 只能是整數或整數表示式 2.1.2 name 可以重複定義為不同的整數或整數表示式 例如 count 500 size list 3 equ 偽指令 3.1 ...