C语言-第9章

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

将#ifdef变成#ifndef表示没有用#define定义标识符则执行程序段1.
C程序设计
第9章 预处理命令
#include <stdio.h> (9-8.CPP) #define LETTER 1 void main() { char str[20]="C Language",c; int i; i=0; while((c=str[i])!='\0') { i++; #if LETTER 作用:如果表达 if(c>='a' && c<='z') c=c-32; 式的值为真或非0, #else 则执行程序段1,否 if(c>='A' && c<='Z') 则执行程序段2。 c=c+32; #endif printf("%c",c); } }
例9.1: (9-1.CPP)
#include <stdio.h> #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); }
ห้องสมุดไป่ตู้
C程序设计
第9章 预处理命令
(1) 在进行替换时,是将接收到实参值的“字符串”代替 “宏名(参数)”,而不会对“字符串”先进行运算。 #include <stdio.h> #define S(a,b) a+b void main() { int x; x=S(2,3)*8; printf("%d\n",x); } (9-6.CPP)
(2) 在宏定义时,在宏名与带参数的括弧之间不应加 空格,否则将空格以后的字符都作为替代字符串的一部分。
C程序设计
第9章 预处理命令
9.2 文件包含
我们可以将书写的源程序放在不同的文件中,在需要 的时候将其包含进来即可。 格式:#include<文件名> 或#include "文件名" 说明:一个#include命令只能包括一个文件,使用尖 括号时只从存放C库函数头文件的目录中找,使用双引号 先在本文件的目录中找,找不到时再从存放C库函数头文 件的目录中找。
C程序设计
第9章 预处理命令
9.1 宏定义
9.1.1 不带参数的宏定义 格式:#define 标识符 字符串 作用:用“标识符”代替相应的“字符串”。 #define PI 3.1415926 说明:在进行预编译时,会将谁有非字符串常量中的标识 符替换为对应的字符串。
C程序设计
第9章 预处理命令
格式: #if 表达式 程序段1 #else 程序段2 #endif
C程序设计
第9章 预处理命令
(5) 在进行宏定义时,可以引用已定义的宏名,可以层层 置换。
例9.2 在宏定义中引用已定义的宏名 #include <stdio.h> (9-4.CPP) #define R 3.0 #define PI 3.1415926 #define L 2*PI*R #define S PI*R*R 此处的不会被替换 void main() { printf("L=%f\nS=%f\n",L,S); } (6) 宏定义是专门用于预处理命令的一个专用名词,它与 定义变量的含义不同,只作字符替换,不分配内存空间。
C程序设计
第9章 预处理命令
9.1.2 带参数的宏定义 格式:#define 宏名(参数) 字符串 作用:在使用“宏名(实参)”时,会将对应的值传递到“字 符串”中,然后再将接受到值后的字符串代替“宏名(实参)”。 例9.3 使用带参的宏 #include <stdio.h> (9-5.CPP) #define PI 3.1415926 #define S(r) PI*r*r void main() { float a,area; a=3.6; area=S(a); printf("r=%f\narea=%f\n",a,area); }
在进行预编译时,会将所有的PI换成3.1415926,然后 再进行正式的编译。
C程序设计
第9章 预处理命令
(1) 宏名一般习惯用大写字母表示,以便与变量名相区别。 但这并非规定,也可用小写字母。 (2) 使用宏名代替一个字符串,可以减少程序中重复书写 某些字符串的工作量。
(3) 宏定义是用宏名代替一个字符串,只作简单置换,不 作正确性检查。只有在编译已被宏展开后的源程序时才会发现 语法错误并报错,如果在定义宏的后面加上分号也会有错。
#include <stdio.h> (9-2.CPP) #define A 3+2 void main() { int x; x=A*5; printf("x=%d\n",x); }
展开后为 x=3+2*5 要想得到正 确结果必须 要加圆括号
C程序设计
第9章 预处理命令
(4) #define命令出现在程序中函数的外面,宏名的有效范 围为定义命令之后到本源文件结束。通常,#define命令写在文 件开头,函数之前,作为文件一部分,在此文件范围内有效。 可 以用#undef命令终止宏定义的作用域。 #include <stdio.h> (9-3.CPP) #define A 3+2 void main() { int x,y; int f1(); x=A*5; printf("x=%d\n",x); #undef A y=(A)/5; printf("%d,%d\n",y,f1()); } 这些范围不 int f1() 能用A { int w; w=A-9; return(w); }
C程序设计
第9章 预处理命令
9.3 条件编译
一般情况下,源程序中的所有行都参与编译和执行,如 果想在源程序中只有部分行进行编译和执行,那么可以使用 条件编译,不满足编译的地方就算有错也识别不出来。 格式:#ifdef 标识符 程序段1 #else 程序段2 #end if #ifdef 标识符 程序段1 #end if
C程序设计
第9章 预处理命令
第9 章
预处理命令
C程序设计
第9章 预处理命令
预处理命令就是在程序进行编译前进行预先的处理, 处理完之后再进行正常的编译,预处理可以提高编程的效 率,但是预处理不是C语言本身的组成部分,也不是C语言 的语句。C语言提供的预处理有下列三种形式: 1、宏定义(#define) 2、文件包含(#include) 3、条件编译(#ifdef、#if)
作用:如果”标识符”已经被#define命令定义过, 则编译时只编译程序段1,否则编译程序段2。其中#else 部分可以没有。
C程序设计
第9章 预处理命令
#include<stdio.h> (9-7.CPP) #define A 5 void main() { int a,b,x,y; a=10; b=5; #ifdef B { x=a*b; printf("x=%d\n",x); 这里可以随便乱写,因为A没有被#define定义sdfjsjdf } #else { x=a/b; printf("x=%d\n",x); } #endif #ifdef A y=a-b; printf("y=%d\n",y); #endif }
C程序设计
第9章 预处理命令
例如:(1) 建立一个名为def.cpp的文件,保存到D盘根 目录,将如下程序输入到本文件。 #define PI 3.1415926 #define E 2.718 #define G 9.81 (2) 建立一个名为max.cpp的文件,保存到D盘根目录, 将如下程序输入到本文件中。 float max(float x,float y) { float z; z = x>y? x:y; return(z); }
C程序设计
第9章 预处理命令
(3) 建立一个名为main.cpp的文件,保存到D盘根目录, 将如下程序输入到本文件中,编译并执行本程序。 #include<stdio.h> #include "def.cpp" #include "max.cpp" void main() { float s1,s2; s1=PI*2*2; s2=PI*3*3; printf("s1=%f,s2=%f\n",s1,s2); printf("max=%f\n",max(s1,s2)); }
相关文档
最新文档