從零開始一起學C語言(八) 編譯預處理

2021-09-12 16:00:43 字數 1586 閱讀 1965

目錄

一、編譯預處理

1、作用

2、包含標頭檔案

3、巨集定義

4、條件編譯

二、位運算

1、位運算子

2、寫1和寫0

三、32個關鍵字

四、模組化程式設計

以#開頭的命令,為編譯做準備工作,篩選出需要編譯的**。

#include //從系統指定的目錄尋找指定的stdio.**件。

#include 「stdio.h」 //在當前工程下尋找指定的stdio.**件。

#define a b

用 b 完全代替a。

不帶引數:#define one 1

帶引數:#define sum(a,b)  a+b

int a;

a = 2*sum(2,3); // 2*2+3

巨集定義和函式的比較

巨集定義:執行效率高,引數沒有經過型別檢驗,不安全。

函式:執行效率低,引數經過型別檢驗,安全。

#ifdef #ifndef #endif #else

#ifndef a

#define a

語句;#endif   //用在.**件中防止重複包含標頭檔案

#ifdef a

語句1;

#else

語句2;

#endif  //選擇編譯

& 按位與 任何數和1與的結果為本身,和0與的結果為0  。

| 按位或 任何數和1相或為為1,和0相或為本身。

^ 異或  不同為1,相同為0

~ 取反  0為1,1為0

<< 左移 所有二進位制位左移若干位(左捨棄,右補0)

>> 右移 所有二進位制位右移若干位(右捨棄,正數左補0,負數左補1)

讓a的第b位寫1:a |= 1《讓a的第b位寫0:a &= ~(1

switch while for if case default else do

float void int long short char double unsigned signed

struct enum union

sizeof

static extern auto const register volatile typedef

auto 自動變數,由編譯器自動開闢釋放。沒有修飾的區域性變數。

register 暫存器變數。建議編譯器把變數存放到暫存器操作。

volatile 防止編譯器優化。每次都是從變數定義的位置取值。

const 唯讀變數(常變數)。

int const *p; // *前: p指向的變數的值不可改變。

const int *p; //*前: p指向的變數的值不可改變。

typedef 重定義型別符。

typedef unsigned int u32;

#define u32 unsigned int

就是每乙個模組建立乙個對應的.c和.**件。主函式要想呼叫該模組,只需要包含對應的.**件就可以了。

.c 寫模組的初始化和功能函式。

.h 寫型別宣告、函式的宣告、巨集定義等。標準的.**件需要有防止重複編譯的編譯預處理命令。

從零開始一起學C語言(六) 結構體

目錄 一 結構體的引入 二 結構體的定義以及初始化 1 結構體的定義 2 結構體變數的初始化。三 結構體內元素的訪問 1 用結構體變數名 2 用結構體指標 四 結構體型別的大小 五 共用體 1 共用體的定義 2 共用體常用舉例 六 公用體的大小 七 列舉 現實生活中有很多變數需要描述,例如乙個人的資...

從零開始一起學C語言(九) 資料結構

目錄 一 資料結構的介紹 1 資料結構 2 資料結構的儲存方式 二 記憶體的動態開闢和釋放 1 記憶體的動態開闢 2 記憶體的動態釋放 三 鍊錶的建立 1 煉表頭的建立 四 鍊錶的讀和寫 1 建立任意數量的節點 2 鍊錶的寫 3 鍊錶的讀 五 鍊錶的插入 1 頭插法 2 尾插法 六 鍊錶的刪除 相互...

從零開始學C語言

從零開始學c語言 閬苑祁寒 更新說明 此版本是最終版本。初始版本有關helloworld的內容調到了附錄部分。寫在前面 本文從乙個初學者的角度,給出了對c語言的簡單理解。最近一次更新調整了之前的敘述方式。目錄part1 從hello world講起 part2 知識結構梳理 part3 一路走來的習...