《C Primer》學習之列舉型別和預編譯

2021-06-21 23:08:43 字數 1222 閱讀 7513

列舉型別:

以前很少用到,以為直接定義一些狀態變數就行了,幹嘛用列舉啊。最近看了一些程式**,覺得列舉確實在有些地方方便簡潔多了,所以就研究總結了一下。

列舉用enum關鍵字來定義基本型別是enum xxtype{xxa,xxb,xxc};

形式很簡單,但是有幾個地方很容易讓人忽略。

1.列舉的元素不是變數,是常量,如果沒有顯式的進行常量賦值的話,其有預設的賦值,就是第乙個元素為0,後面的元素依次加1。

2.列舉定義完之後xxtype已經是型別了,可以用這個型別去定義列舉物件xxtype myobject;

3.列舉成員的值可以不是唯一的,比如xxc==1,這個時候xxb和xxc就是相等的。

4.列舉成員的引用可以用xxtype.xxa;

預編譯:

很多時候(幾乎是無時無刻)我們都需要使用標頭檔案,定義好標頭檔案之後再進行包含。這樣可以編譯我們對自己的程式進行修改和維護。

在標頭檔案包含之後,編譯之前,就必然需要經歷乙個過程叫做「預編譯」。

預編譯的時候我們特別需要注意幾種情況,首先是避免多重包含,我們不希望乙個相同的標頭檔案被多重包含,費時費力。預處理允許我們自定義變數,預處理變數(常量)的名字在程式中年必須是唯一的。任何與預處理變數匹配的名字的使用都關聯到該預處理變數。為了避免衝突,預處理變數經常用全大寫字母表示。一般都是通過下面語句來實現避免多重包含。

#ifndef xxa_h

#define xxa_h

#endif

這裡的話就可以保證這個標頭檔案只被編譯一次,xxa_h也可以是其他名字,符合規則都行,但是通常情況下都是標頭檔案名字的大寫。

#pragma once 效果也是一樣的。只不過上面的形式是c++的專用,#pragma once跨平台好些。

還有一種情況需要注意的,在以前的部落格中也有提到,就是標頭檔案迴圈包含的時候會出現問題。即a.h中包含b.h,然而b.h中又包含a.h。這個問題會導致一些型別未定義的錯誤,這個錯誤也是不應該的,其中乙個解決方法是不在標頭檔案中包含另外乙個標頭檔案,而是在cpp中進行所需標頭檔案包含。至於其他的方法,應該還有很多,這裡不做過多的贅述,可進行網上搜尋適合自己的解決方案。

標頭檔案包含:

還有乙個比較基本的認識就是標頭檔案的包含方式的區別。用尖括號包含的話,就編譯器就認為這個標頭檔案是標準標頭檔案。編譯器將會在預定義的位置集查詢該標頭檔案,這些預定義的位置可以通過設定查詢路徑環境變數或者通過命令列選項來修改。如果標頭檔案包含在一對引號裡,那麼認為它是非系統標頭檔案,非系統標頭檔案的查詢通常開始於原始檔所在的路徑。

C Primer 筆記 列舉型別

1.和類一樣,每個列舉型別定義了一種新的型別。列舉屬於字面值常量型別。2.c 包含兩種列舉 限定作用域的和不限定作用域的。c 11新標準引入了限定作用域的列舉型別。enum class struct myenum 限定作用域的列舉 enum class struct myenum1 限定作用域的列舉...

C PRIMER之2 基礎型別和變數

1 基本內建型別 bool 未知大小 char 8位 wchar t short int 16位 long 32位 float 6位有效數字 1個位元組 大部分情況不夠用 double long double 10位有效數字 2個位元組或更多 大概多用int uint double.金錢資料 2 字...

C語言學習之列舉型別

列舉 enum 型別是計算機程式語言中的一種資料型別。列舉型別 在實際問題中,有些變數的取值被限定在乙個有限的範圍內。例如,乙個星期內只有七天,一年只有十二個月,乙個班每週有六門課程等等。如果把這些量說明為整型,字元型或其它型別顯然是不妥當的。為此,c語言提供了一種稱為 列舉 的型別。在 列舉 型別...