picf509c语言程序,樊媛媛c语言程序设计09编译预处理.pptx
樊媛媛c語言程序設計09編譯預處理
9.1 宏定義 1、不帶參的宏定義用一個指定的標識符(宏名)代表一個字符串。一般形式:#define 標識符 字符串如:#define PI 3.1415926有了這一宏定義后,程序中凡是用到3.1425926的地方都可以以宏名PI出現。 牛牛文庫文檔分享 例:定義一個宏名來代表一個參數。eg9-01.c#define PI 3.1415926main(){ float r=1.0,c,s; c=2*PI*r; s=PI*r*r; ┈}系統在對程序進行編譯以前,首先將所有的編譯預處理指令進行預處理,對本例來說,就是將程序中所有的宏名PI還原成3.1415926,——宏展開。 牛牛文庫文檔分享例:定義一個宏名來代表一個數據個數。eg9-02.c#define N 100main(){ int a[N],i; float s=0; for(i=0;i 牛牛文庫文檔分享file1.cfile1.cfile2.c#include “file2.c”BBAA 牛牛文庫文檔分享例:#include “math.h”main(){ float a,b,c,s,area; scanf(“%f%f%f”,&a,&,&c); s=0.5*(a+b+c); area=sqrt(s*(s-a)*(s-b)*(s-c)); printf(“\n %f”,area); } 牛牛文庫文檔分享f.cf.h#include “f.h”main(){printf(“\n%f”,f1(3.0));printf(“\n %f”,fac(10));}float f1(float r){return(PI*r*r);}float fac(int n){ int i; float s=1;for(i=1;i<=n;i++) s*=i;return(s);}#define PI 3.1415926float f1(float r);float fac(int n); 牛牛文庫文檔分享2*3+5=112*(3+5)=16函數式宏定義與普通函數 在C及C++語言中允許用一個標識符來表示一個字符串,稱為宏,該字符串可以是常數、表達式、格式串等。在編譯預處理時,對程序中所有出現的“宏名”,都用宏定義中的字符串去代換,這稱為“宏代換”或“宏展開”。宏定義是由源程序中的宏定義命令完成的。宏代換是由預處理程序自動完成的。若字符串是表達式,我們稱之為函數式宏定義,那函數式宏定義與普通函數有什么區別呢?我們以下面兩行代碼為例,展開描述: 函數式宏定義:#define MAX(a,b) ((a)>(b)?(a):(b)) 普通函數?????:?MAX(a,b) { return a>b?a:b;}(1)函數式宏定義的參數沒有類型,預處理器只負責做形式上的替換,而不做參數類型檢查,所以傳參時要格外小心。(2)調用真正函數的代碼和調用函數式宏定義的代碼編譯生成的指令不同。 如果MAX是個普通函數,那么它的函數體return a > b ? a : b; 要編譯生成指令,代碼中出現的每次調用也要編譯生成傳參指令和call指令。而如果MAX是個函數式宏定義,這個宏定義本身倒不必編譯生成指令,但是代碼中出現的每次
總結
以上是生活随笔為你收集整理的picf509c语言程序,樊媛媛c语言程序设计09编译预处理.pptx的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: tftp的c语言实现,GitHub -
- 下一篇: android自定义dialog开源库,