回覆列表
  • 1 # 使用者834195712159

    C程式的執行包括編譯和連結兩個階段,其實在編譯之前預處理器首先要進行預處理指令進行操作(#include檔案包含指令),將處理完產生的一個新的原始檔進行編譯。

    注意:1.所有的預處理指令都以符號“#”開頭的,並且不需要分號(;)結尾.

    2.預處理指令可以出現在程式的任何位置,它的作用範圍是從它出現的位置到結尾結束.(我習慣把它寫在源程式的開頭,這樣會作用整個源程式檔案).

    C語言提供預處理指令主要有:1.宏定義、2.檔案包含、3.條件編譯.

    宏定義分為:1.不帶引數的宏定義

    2.帶引數的宏定義.

    2.1.不帶引數的宏定義:

    #define 宏名 字串(可以是其他的)

    #define PI 3.14 宏名一般用大寫,小寫也不會錯誤。

    #define R 10

    #define S 2*PI*R 在另一個宏裡面引用上面的宏

    作用:它的作用是在編譯處理時,將源程式中所有的“宏名”替換成右邊的“字串”,常用來定義常量,相比定義成全域性變數或函式效率較高。

    #include<stdio.h>

    #define PI 3.14

    float girth(float redius){

    return 2 * PI *redius;

    }

    int main(){

    float g = girth(2);

    printf("周長:%f",g);

    return 0;

    }

    周長:12.560000

    注意:1.如果用雙引號擴起來的字串內的字元,不會進行宏替換.

    char *s = "RadioPI"; //PI不會被替換3.14

    2.在編譯預處理用字串替換宏名時,不做語法檢查,只是簡單的字串替換。 只有在編譯的時候才對已經展開的宏名進行語法檢查。

    3.宏名的有效範圍是從定義位置到檔案結束,如果需要終止宏定義的作用域,可以使用 #undef 宏名 .

    #define PI 3.14

    //作用域

    #undef PI

    #define 宏名(引數列表)字串.

    作用:在編譯預處理時,將源程式中所有的宏名替換成字串,並且將 “字串中的引數” 用 “宏名(右邊引數列表)” 中的引數替換。

    #include<stdio.h>

    #define average(a,b) (a+b)/2

    int main(){

    int a = average(10,4);

    printf("平均值:%d",a);

    return 0;

    }

    average(10,4)替換成 int a = (10+4)/2;

    平均值:14

    注意:1.宏名和引數列表之間不能有空格,否則空格後面的 所有字串都 作為 被替換的字串。

    2.帶引數的宏在展開時,只作為簡單的字元和引數替換,不進行如何操作。所以在定義宏時,一般用小括號括住字串的引數.

    3.計算結果最好也用括號括起來

  • 中秋節和大豐收的關聯?
  • [圪]這個字念什麼?