複習 C 之標頭檔案,巨集定義,列舉,內聯函式

2021-09-18 07:51:46 字數 2369 閱讀 1313

標頭檔案:

標頭檔案主要作用在於多個**檔案全域性變數的重用、防止定義的衝突,對各個被呼叫函式給出乙個描述,其本身不需要包含程式的邏輯實現**,它只起描述性作用,使用者程式只需要按照標頭檔案中的介面宣告來呼叫相關函式或變數,鏈結器會從庫中尋找相應的實際定義**。

以下定義乙個person類

cperson.h  //.**件是不參加編譯的

class cperson

;

cperson.cpp

#include "cperson.h"

#includeusing namespace std;

cperson::cperson():m_nname(200)

cperson::~cperson()

void cperson::aa()

執行結果

巨集定義:

1.ifndef,意為判斷沒有定義巨集怎麼辦,解決重複包含,需要和#endif,#define配合使用,ifndef與endif之間的**只能呼叫一次

同樣的,如果在同乙個.cpp檔案中呼叫了這個.**件兩次,編譯器也只會執行一次。

2.pragma once //只編譯一次

3.#define

變數

#includeusing namespace std;

#define m 20 //將**中的m都代換成20

int main()

函式

#includeusing namespace std;

// \ 和下一行連線

#define aaaaa() \

for(int i = 0;i < 10;i++)\

cout << i << " ";

//帶引數的,巨集的引數頁數替換的,##的意思是拼接

#define bbbbb(thisclass) \

thisclass ps;\

ps.show();

#define ccccc(thisclass)\

thisclass ps##thisclass;\

ps##thisclass.show();

//#是轉字串

#define ddddd(thisclass) cout << thisclass << endl;

//#define ddddd(thisclass) cout << #thisclass << endl;

#define eeeee(name) cperson ps##name;

class cperson

};class cson :public cperson

void messageboxa(char* str)

這樣就解決了複製**時字符集不同導致的錯誤。

列舉:

列舉是乙個被命名的整型常數的集合。

//表示紙牌的花色

enum cardscolor

;cardscolor calor; //列舉型別的變數

如果列舉沒有初始化變數,則從第乙個變數開始依次賦值為0,1,2......。

當其中的某個變數被賦值,後面的數值依次加1。

enumnum x ;
則x1 = 0,x2 = 0,x3 = 50,x4 = 51。

列舉值是常量,不是變數,不能在程式中用賦值語句再對它賦值。

只能把列舉值賦予列舉變數,不能把元素的數值直接賦予列舉變數。如color=cardsflower;是正確的,而color=0;是錯誤的。

內聯函式:

內聯函式是指那些定義在類體內的成員函式,即該函式的函式體放在類體內。

#includeusing namespace std;

//內聯函式和巨集的區別

//巨集不檢查錯誤,建議用內聯函式,const,enum替換巨集

inline void show()

//函式**量少,呼叫次數比較頻繁

int main()

#pragma once

#includeclass cperson

};

systemcall標頭檔案巨集值定義

long syscall longnumber,syscall的第乙個引數number根據例子程式都是使用sys 定義的呢?根據man 2 syscall可以看到number是使用的 include 標頭檔案,裡面又 include 和 include 其中asm unistd.h裡面根據平台不同最...

glibc標頭檔案和巨集定義

標頭檔案沒啥好說的,無非就是 和 的區別,這估計只要是學過c c 的人都明白。現在的編譯器對頭檔案的包含順序沒有要求,但老的c實現則不一樣。當然,我們現在無需關心標頭檔案順序了。我們為啥要包含標頭檔案呢?標頭檔案裡面有定義嘛,使用任何函式之前都必須定義該函式。所以我們並不強求包含標頭檔案,只要你自己...

C 標頭檔案 巨集 編譯問題

2019 02 15 小記 c 標頭檔案的防重複包含是針對同乙個原始檔而言 原因 include 標頭檔案就是一段 的拷貝,標頭檔案中若有型別定義等,重複包含就會造成編譯錯誤,若無型別定義等不造成重複定義的,則無需防重複包含機制 防重包含機制 pragma once ifndef macro def...