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开源库,