1. 程式人生 > >深入理解C語言——#define巨集和列舉的區別

深入理解C語言——#define巨集和列舉的區別

 

(1)從處理過程的角度看:

#define巨集是由編譯前處理器在預編譯處理時處理的,而且只做簡單的字串的替換。列舉常量則是在編譯的時候確定其值的。

(2)從除錯的角度看:

通常情況下,在編譯器裡,可以除錯列舉常量,而不能除錯巨集常量。

(3)從資料的型別看:

#define可以編譯任意型別的常量,而列舉只能是定義整型常量。

(4)從程式碼編寫角度看:

列舉可以一次定義大量常量,而#define巨集只能一次定義一個。

(5)從可維護性來看:

列舉可以集中管理資料,具相同屬性的整形資料可使用列舉,列舉可實現取值的自增,也可指定每個列舉的值,編寫程式碼跟容易,相對來說能減少出錯的機會,也便於程式碼的後期維護和修改。

(6)列舉的取值範圍已經限定了,容易進行引數的檢查,而define沒有這種檢查

相關推薦

深入理解C語言——#define巨集列舉區別

  (1)從處理過程的角度看: #define巨集是由編譯前處理器在預編譯處理時處理的,而且只做簡單的字串的替換。列舉常量則是在編譯的時候確定其值的。 (2)從除錯的角度看: 通常情況下,在編譯器裡,可以除錯列舉常量,而不能除錯巨集常量。 (3)從資料的型別看: #defi

深入理解C語言的預編譯指令之include

get http npe target info pdb tfs mar 語言 慫b促64u父猩84卵ml0http://www.facebolw.com/space/2101977 0俜垂屹17該性膠1http://tushu.docin.com/hmd622 6PD

深入理解c++指標的指標指標的引用

轉載自:https://www.cnblogs.com/li-peng/p/4116349.html 展示一下使用指標的指標和指標的引用修改傳遞給方法的指標,以便更好的使用它。(這裡說的指標的指標不是一個二維陣列) 為什麼需要使用它們 當我們把一個指標做為引數傳一個方法時,其實是把指標的複

深入理解C語言的函式呼叫過程

    本文主要從程序棧空間的層面複習一下C語言中函式呼叫的具體過程,以加深對一些基礎知識的理解。     先看一個最簡單的程式:   點選(此處)摺疊或開啟  /*test.c*/ #include <stdio.h> int foo1(

深入理解C語言(組合語言程式設計師角度)

轉自:http://blog.sina.com.cn/s/blog_16696ec8f0102wq2d.html   一、比較C與彙編的語言要素(可有表格、例子等) 1.資料型別比較:所有資料型別(數與資訊、無符號、有符號等;包括布林型別、   &

深入理解C語言記憶體管理

之前在學Java的時候對於Java虛擬機器中的記憶體分佈有一定的瞭解,但是最近在看一些C,發現居然自己對於C語言的記憶體分配了解的太少。 問題不能拖,我這就來學習一下吧,爭取一次搞定。 在任何程式設計環境及語言中,記憶體管理都十分重要。 記憶體管理的基本概念 分析C語言記憶體的分佈先從Linux下可執行

C語言 - #define巨集的定義與使用方法

一.巨集的概念與定義方法 1.被定義為”巨集”的標示符稱為”巨集名”.在編譯預處理時,對程式中所有出現的”巨集名”,都用巨集定義中德字串去替換,這稱為”巨集替換”或者”巨集展開”. 2.巨集定義是由源程式中德巨集定義命令完成的.巨集替換是由預處理程式自動完成的;在C語言中,”巨集”分

C語言程式設計--巨集預處理

C語言巨集 巨集定義常量 #include <stdio.h> #define SIZE 100 #define BANNER "WARNING:" int main(void){ printf("%d\n", SIZE); printf("%s\n",BANN

C語言巨集函式的區別

由之前的巨集的引入我們知道,巨集函式可以完成一些簡單的運算。那是不是巨集函式就可以取代函式呢?巨集函式和函式到底有哪些區別呢? 下面我們來分析他們其中的區別。 1.程式碼長度:   對於巨集,每次使用時,巨集程式碼都被插入到程式中。除了非常小的巨集之外,程式的長度將大幅度增

深入理解C語言中兩級指標(char **pptr)的引數的用法

最近在看亞嵌的《Linux C程式設計一站式學習》,對其中的兩層指標的引數用法有些疑惑,下面和大家分享一下學習心得! 首先來看一段程式碼: /* main.c */ #include <stdio.h> #include <stdlib.h>

深入理解C語言函式指標

我們一開始只是從功能上或者說從數學意義上理解myFun這個函式,知道myFun函式名代表的是一個功能(或是說一段程式碼)。函式名到底又是什麼東西呢?函式指標變數     一個數據變數的記憶體地址可以儲存在相應的指標變數中,函式的首地址也以儲存在某個函式指標變數中。這樣,我就可以通過這個函式指標變數來呼叫所指向

深入理解C語言-----各資料型別大小

首先看下C標準中“未明確定義”的三種類型Implementation-defined、Unspecified和Undefined。 Implementation-defined 的情況,是C 標準沒有明確規定,但是要求編譯器必須對此做出明確規定,並寫在編譯器的文件中。

深入理解C語言中的指標與陣列之指標篇

前言          其實很早就想要寫一篇關於指標和陣列的文章,畢竟可以認為這是C語言的根本所在。相信,任意一家公司如果想要考察一個人對C語言的理解,指標和陣列絕對是必考的一部分。          但是之前一方面之前一直在忙各種事情,一直沒有時間靜下心來寫這些東西,畢竟

深入理解web.xml中配置//*的區別

 在用SpringMVC進行web開發的時候,如果將DispathcerServlet對外訪問的虛擬路徑配置成/時,需要在Spring的配置檔案中配置<mvc:default-servlet-handler/>這一項,那麼為什麼需要配置這一項呢?如果對外訪

c語言巨集(#define、###)與函式比較

#define -定義識別符號 ef:#define在預處理階段替代所有的Max #define Max 100 int main() { printf("%d\n", Max); system("pause"); return 0

C語言巨集定義define 型別重新命名typedef

  C語言裡面有兩個不容易區分的語法概念,巨集定義define 和型別重新命名typedef。下面我們來談一下兩者之間的差異。   1.型別重新命名typedef: 關鍵字typedef提供了一種為已定義好的資料型別建立別名的機制,為了建立更簡短的型別名,通常使用type

c語言中指針多維數組的理解

分享 方式 方括號 mage 維數 jpg 聲明 col 多維數組 1.復習指針和數組之間的特殊關系:不帶方括號的數組名是一個指針,指向該數組的第一個元素。 2.多維數組: int multi[2][4];//聲明一個二維數組作為舉例 a.理解方式1:可以將數組看成行

06深入理解C指針之---指針類型長度

特征 都是 負數 意義 參數類型 同時 print 相關 通過   該系列文章源於《深入理解C指針》的閱讀與理解,由於本人的見識和知識的欠缺可能有誤,還望大家批評指教。   如果考慮到程序的可移植性和跨平臺性時,指針長度就是一個問題,需要慎重處理。一般情況下,數據指針的長度

[DotNet]深入理解C#的裝箱拆箱

csharp 簡單 部分 nbsp pre 需要 避免 兩個 value 裝箱和拆箱是值類型和引用類型之間相互轉換是要執行的操作。 1. 裝箱在值類型向引用類型轉換時發生 2. 拆箱在引用類型向值類型轉換時發生 光上述兩句話不難理解,但是往深處了解,就需要一些篇幅來

lambda表達式表達式樹(深入理解c#)

來看 情況下 parameter 成員 表示 3.5 multi ret 委托 1.Lambda形式 1). Lambda表達式最冗長的形式: (顯式類型的參數列表)=>{語句} 2). 大多數時候,都可以用一個表達式來表示主體,該表達式的值是Lambda的結果,在這