c语言中预处理指令的作用,C语言中常用预处理指令
轉載自 https://blog.csdn.net/farsight2009/article/details/58602886
姓名:張艷博 學號:17021223249
【嵌牛導讀】: C語言中常用預處理指令介紹
【嵌牛鼻子】:C語言? 預處理? 條件編譯
【嵌牛提問】:怎樣了解C語言中常用預處理指令
【嵌牛正文】:
預處理:對一些預處理命令進行執行的過程 預處理命令:頭文件包含;宏定義等,用#開頭的一些命令。 在C語言中預處理命令不會直接被編譯,而是在編譯這些預處理命令時,將這些預處理命令進行解析,然后將預處理結果替換成真正的C語言能編譯的C語句。 如: #define PI 3.14 在編譯之前,預處理命令define會自動將程序中所有的PI替換成3.14.在編譯時程序中是不會在存在預處理命令的。
一)宏定義 (1)不帶參數的宏定義 如: #define PI 3.14 ①可以用宏定義來定義一個常量來設置一個數組的長度 #define arrr_len 100 int a[arrr_len] ②宏定義只是簡單的替換,而不做正確性的檢查,如果有#define 3.l4中的‘1’寫成‘l’也不會報錯,他只是簡單的替換 如:#define N 3; 他就會將N替換成“3;”包括分號,因為宏定義,會將符號常量的任何東西都將看成一個字符串并替換掉 ③通常宏定義出現在程序的開頭,這個宏定義的作用域是本源文件。 ④如果想要解除宏定義的作用域,就在你需要解除的地方加上: #undef XXX ⑤宏定義可以在定義的時候就層層替換 如: #define PI 3.14 #define R 5; #define L 2*PI*R 注意:在宏定義的時候只是將這個看成字符串,做簡單的替換,而不會做運算。 ⑥ 在程序中如果在字符串中出現與宏名一樣的字符,不會做替換 如: #define L = 2*3.14 Printf(“L=%d”,L); (2)帶參數的宏定義 (1)#define s(a,b) a*b S(2,3)替換成 2*3 (2) #define PI 3.14 #define S(r) PI*(r)*(r) 程序中:S(2+3) 替換成 3.14*2*2 (3) #define PI 3.14 #define S(r) PI*r*r 則s(2+3)可以替換成: 3.14*2+3*2+3 (4) (4)#define PI 3.14 #define S(r) PI*(r)*(r) 則s(2+3)可以替換成: 3.14*(2+3)*(2+3) (5)#define D "%d" #define D1 "\n" #define D2 D D D1 printf(D2,5,6); 等價于 printf(“%d” “%d” “\n”,5,6)等價printf(“%d%d\n”,5,6)
二) 頭文件包含 #include 或者 #include “xxxx.h” 頭文件包含的使用方式: ①可以將多文件編程的所有頭文件專門寫入一個文件,然后在每一個文件中引用這個文件即可。 ② 專門在一個文件中將所有類型的printf利用宏定義表示,只需要在每一個文件中引入這個頭文件即可。 注意: ①如果在文件1要包含文件2,而文件2要用到文件3;而文件2只是被文件1包含時,只需要在文件1中包含文件2和文件3,并且文件3的包含在文件2的前面。 ②文件1包含文件2,文件2包含文件3,只需要在相應的文件中包含該文件即可。 ③ 如果包含的頭文件不再當前目錄中,就需要指定路徑 #include “D:\works\daima\farmat.h”
三) 條件編譯 定義:在C源碼中,基本上所有的代碼都要參與編譯的過程,編譯也是耗費時間的過程,因此我們在編譯大量的C源碼時,可以根據需要對一些源碼進行編譯 #define 標識符 1 #ifdef 標識符 程序段1; #else 程序段2; #endif (紅色的部分是可選部分,是可以省略的) 作用:如果ifdef后面的標識符是被#define定義過,則程序段1將會被編譯,否則程序段2將會被編譯。 例子: #include #define int_16 int main(int argc, char *argv[]) { #ifdef int_32 printf("int is:32"); #else printf("int is:16"); #endif return 0; } 注意:#define int_32這個宏,后面可以是任意的字符,符號。或者什么都沒有。 #define 標識符 #ifndef 標識符 程序段1; #else 程序段2; #endif (紅色的部分是可選部分,是可以省略的) (1) #if 表常量達式 程序段1; #else 程序段2; #endif (紅色的部分是可選部分,是可以省略的) (2)嵌套 #if 表常量達式1 程序段1; #else #if 表常量達式2 程序段2; #else 程序段3; #endif #endif (5)#if 表常量達式1 語句段1; #elif 表常量達式2 語句段2; #elif 表常量達式3 語句段3 #else 語句段4 #endif 四)C語言的內嵌宏 C語言的內嵌宏 C語言的內嵌宏 __DATE__ :編譯器當前編譯此源文件的日期 __FILE__:當前源文件的文件名 __LINE__:當前語句所在代碼的行號(調試很重要) __func__當前語句所在源碼的哪一個函數中
總結
以上是生活随笔為你收集整理的c语言中预处理指令的作用,C语言中常用预处理指令的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux vino vnc,CentO
- 下一篇: 程序设计基础c语言上机考试,C语言程序设