null第9章 编译预处理命令
编译预处理
C语言编译系统的一个组成部分。是指编译前由编译系统中的预处理程序对源程序的预处理命令进行加工。C程序的源代码中的编译预处理命令不是C语言的一部分更不是C语句,但它扩展了C程序
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
的环境。
C语言的预处理命令均以“#”打头,末尾不加分号,以区别于一般的C语句,其作用域是出现点到源程序文件的末尾。
C程序提供的预处理功能有三种:
宏定义(宏替换)
文件包含
条件编译。第9章 编译预处理命令宏定义1. 不带参数的宏定义
用一个指定的标识符来代
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
一个字符串,它的一般形式为: #define 标识符 字符串
这种方法使用户能以一个简单的名字代替一个长的字符串,因此把这个标识符称为宏名,在预编译时将宏名替换成字符串的过程称为宏展开。 宏定义#define PI 3.1415926
void main()
{
float l,s,r,v;
printf("input radius :"); scanf("%f",&r);
l=2.0*PI*r; s=PI*r*r; v=4.0/3*PI*r*r*r;
printf("l=%10.4f\ns=%10.4f\nv=%10.4f\n", l,s,v);
}null说明:
1.宏名一般习惯用大写字母表示,以与变量名区别。
2.使用宏名代替一个字符串,可以减少程序中重复书写
某些字符串的工作量,还可提高程序的可移植性。
3.宏定义是用宏名代替一个字符串,也就是作简单的置
换,不作语法检查。
4.宏定义不是C语句,不要在行末加分号。
5.#define命令中的宏名的有效范围为定义命令之后
到本源文件结束。
6.可以用#undef命令终止宏定义的作用域。
#undef 宏名
7.在进行宏定义时,可以引用已定义的宏名,可以层
层置换。
8.对程序中用双引号括起来的字符串内的字符不进行
置换。#define R 3.0
#define PI 3.1415926
#define L 2*PI*R
#define S PI*R*R
#include
void main()
{
printf("L=%f\nS=%f\n",L,S);
}printf("L=%f\nS=%f\n", 2*3.1415926*3.0,3.1415926*3.0*3.0);2. 带参数的宏定义不是进行简单的字符串替换,还要进行参数替换。
其定义的一般形式为:
#define 宏名(参数表) 字符串
例如:#define S(a,b) a*b
#define PR(x) printf("s=%f\n”, x)2. 带参数的宏定义带实参的宏名被展开时,宏名被所定义的宏体替换, 宏体中的形参按从左到右的顺序被实参替换。area=S(3,2)展开的结果是: area=3*2;
S(a+c, b+c)展开的结果是: a+c*b+c;
PR(area)展开的结果是: printf("s=%f\n”, area) 在宏定义时,在宏名与带参数的括弧之间不应加空格,否则将空格以后的字符都作为替代字符串的一部分。null带参数的宏与
函数
excel方差函数excelsd函数已知函数 2 f x m x mx m 2 1 4 2拉格朗日函数pdf函数公式下载
有什么不同?1.使用带参的宏实参对形参只是进行简单的字符串替换。
2. 宏在展开时并不分配内存单元,不进行值的传递处理,也没有返回值的概念。
3. 宏不存在类型问题,宏名无类型,它的参数也无类型,只是一个符号代表而已。
4.宏替换不占运行时间,只占编译时间。而函数调用则占运行时间。文件包含1. 文件包含是指一个源文件可以将另一个源文件的全部内容包含进来。
2.#include命令有两种格式。
#include <文件名>
#include "文件名"
3.两种格式区别
编译系统寻找文件的方式不同,尖括号表示直接到包含目录(include)查找,常用于嵌入系统提供的
标准
excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载
文件;双引号首先在当前文件目录查找,常用于包含用户自己编写的文件
4.程序设计中,常常把公用符号常量或者宏定义组成一个文件,减少重复书写。文件包含null文件 format.h
#define PR printf
#define NL "\n"
#define D "%d"
#define D1 D NL
#define D2 D D NL
#define D3 D D D NL
#define D4 D D D D NL文件 print.c
#include "format.h "
void main()
{int a,b,c,d;
a=1;b=2;c=3;d=4;
PR (D1,a);
PR (D2,a,b);
PR (D3,a,b,c);
PR (D4,a,b,c,d);
}例:用宏代表输出格式条件编译它的功能是:当标识符已经被定义过,则对程序段1进行编译,否则编译程序段2,其中#else部分可以没有。条件编译 一般情况下,源程序的所有行都参加编译,但有时希望对其中一部分内容只在满足一定条件时才进行编译,也就是对一部分内容指定编译的条件,这就是条件编译。条件编译有以下3种形式:1.#ifdef 标识符
程序段1
#else
程序段2
#endif#ifdef 标识符
程序段1
#endifnull它的作用是:当指定的表达式值为真(非0)时就编译程序段1,否则编译程序段2。2.#ifndef 标识符
程序段1
#else
程序段2
#endif第一行与第一种形式不同:将ifdef改为ifndef。
它的作用是:若标识符未被定义,则编译程序段1,否则编译程序段2。3.#if 表达式
程序段1
#else
程序段2
#endif