Keil C 中的預處理命令const

2021-04-22 05:25:55 字數 784 閱讀 3328

在c51中,巨集定義是乙個重要內容。無引數的巨集作為常量,而帶引數的巨集則可以提供比函式更高的呼叫效率。但預處理只是進行簡單的文字代替,而不做語法檢查,所以會存在一些問題。

例如:#define bufsize 100

這裡的bufsize只是乙個名字,並不占用儲存空間並且能被放在乙個標頭檔案中。在編譯期間編譯器將用字串「100」來代替所有的bufsize。這種簡單的置換常常會隱藏一些很難發現的錯誤,並且這種方法還存在型別問題。比如這個bufsize究竟是整數還是浮點數?而使用const,則把值帶入編譯過程即可以解決這些問題,和上面巨集定義等效的語句如下:

const    int    bufsize=100;

這樣就可以在任何編譯器需要知道這個值的地方使用bufsize,並且編譯器在編譯過程中可以通過必要的計算把乙個複雜的常量表示式縮減成簡單的,這在定義陣列時尤其突出。

用關鍵字const修飾的識別符號是一類特殊的常量,稱為符號常量,或稱之為const變數。const修飾符的使用也很簡單。事實上,對基本資料型別的變數,一旦加上const修飾符,編譯器就將其視為乙個常量,不再為他分配記憶體,並且每當在程式遇到它時,都用在說明時給出的初始值取代它。

因為被const修飾的變數的值在程式過程中不能被改變,所以在生命符號常量時,必須對符號常量進行初始化,除非這個變數使用extern修飾的外部變數。

const    int    i=8;

const    int    d;                        //錯誤

extern    const    int    d;            // 正確

C C中的預處理命令

分析 預編譯又稱為預處理 是做些 文字的替換工作。處理 開頭的指令 比如拷貝 include包含的檔案 define 巨集定義的替換 條件編譯等,就是為編譯做的預備工作的階段,主要處理 開始的預編譯指令,預編譯指令指示了在程式正式編譯前就由編譯器進行的操作,可以放在程式中的任何位置。c c 編譯系統...

C 中的預處理命令

參考文章 本篇主要學習預處理命令 一 基本知識 1 定義符號和取消符號定義的預處理指令 define 和 undef 2 條件編譯指令 if else endif之外,還有乙個 elif.必須包括一條 endif語句 3 region和 endregion 用於 摺疊,這個經常用 4 warning...

C 中的預處理命令

參考文章 本篇主要學習預處理命令 一 基本知識 1 定義符號和取消符號定義的預處理指令 define 和 undef 2 條件編譯指令 if else endif之外,還有乙個 elif.必須包括一條 endif語句 3 region和 endregion 用於 摺疊,這個經常用 4 warning...