动手学习C语言-S9编辑预处理

种类如下三种:

#include “文件名.h” // 文件包含功能
#define 宏代换命令 // 宏定义代换功能

if ~#endif

条件命令可以在函数内,但不建议遮掩做 // 条件选择编译功能

编辑预处理命令定义均已编译预处理标识符“#”起始,且命令的末尾不加分号“;”;

宏定义与宏代换

1、不带参数的宏定义:
#define PI 3.14
2、带参数的宏定义
#define MAX(x,y) (x>y)?x:y
形参为了不引起歧义,加上括号;
带参宏定义也可嵌套使用,即定义一个宏定义,可以引用另一个宏定义进行定义;
例子:

// 宏定义使用
#define PR printf // 代表printf 
#define NL "\n"   // 代表回车符
#define SP " "    // 代表空格字符
#define D "%d"    // 代表 %d 格式控制
#define F "%f"
#define D1 D NL   // 代表D NL 定义
#define F1 F NL   // 代表F NL嵌套定义
#define F2 F SP F1 // 代表F SPF1嵌套定义
#define S "%s"    // 代表"%s"格式控制

void main(){
	int a,b;
	float c,d;

	char str[]="the beautful lake";
	a=123456;
	b=200;
	c=3.14159;
	d=7.9;

	PR(D1,a);   // 宏展开为printf("%d""\n",a);即printf("%d\n",a);
	PR(F1,c);   // 宏展开为printf("%f" "\n",c)
	PR(F2,c,d);  // 宏展开为printf(" %f" " " "%f" "\n",c,d);
	PR(S,str);   // 宏展开为printf("%s",str)
	PR(NL);      // 宏展开为printf("\n")

}

自己不要写这么复杂,就是了解能看到别人写的代码
带参数的宏定义和带参数的函数,在使用上有何不同?

宏定义作用域

作用范围:从宏定义命令开始到程序结束;如果需要在源程序的某处终止宏定义,则需要使用 #undef命令取消宏定义;

文件包含处理

#include “文件名” 或者 #include <文件名>
双引号表示先在所在目录中查找包含文件,若找不到再到系统标准库目录中查找;尖括号表示在标准目录下查找该文件;

#预处理文件包含过程:

// 编写格式控制宏定义,集中形成 .h 头文件。以便在其他文件程序终身使用

// Sphere.h 头文件
#define PI 3.1415926535
#define S(r) PI*r*r
#define V(r) 4.0/3.0*S(r)*r
#define PR printf
#define NL "\n"
#define F "%f"
float shell(float r){   // 函数定义
	return (V(r+0.9567)-V(r));
}

// 主程序:测试头文件
#include "stdio.h"
#include "sphere.h"
void main(){
	float r;
	printf("Enter the radius:");
	scanf("%f",&r);
	PR("The Space is:"NL);
	PR(F NL,S(r));
	PR("The Volume is: "NL );
	PR(F NL,V(r));
	PR("The shell is:"NL);
	PR(F NL,shell(r));

}


**多个相关关联的文件包含和嵌套使用的逻辑顺序**

## 条件编译命令
1、#if ~ endif 结构一般形式
	#if 常量表达式
		程序模块
	#endif
例子:

```c
#define MAX 0
	#if MAX ==0
		#define MAX 5
	#endif
main(){
	int x=3;
	while(x<MAX){
		printf("x=%d,",x);
		x++;
	}

}
// 答案是:3,4

2、 #if#else#endif结构
#if 常量表达式
语句;
#else
语句
#endif

例子:

#define MAX 16
	#if MAX >10
		#define MAX 10
	#else 
		#define MAX 5
	#endif
main(){
	int x=3;
	while(x<MAX){
		printf("x=%d,",x);
		x++;
}
}

3、#if~ #elif~#endif
#if 常量表达式1
语句1;
#elif 常量表达式2
语句2;
#endif
例子:

#define MAX 20
	#if MAX>10
		#define MAX 10
	#elif MAX >5
		#define MAX 3
	#elif MAX >2
		#define MAX 2
	#endif
main(){
	int x=0;
	while(x<MAX){
		printf("x=%d,",x);
		x++;
	}
}

4、 #ifdef 和ifndef 编译命令
#ifdef条件便已命令的一般形式为
#ifdef 宏名标识符
#ifndef条件便已命令的一般形式为
#ifndef 宏名标识符
#ifdef和#ifndef 条件编译命令的功能,是用来识别宏名是否被定义过
#ifdef和#ifndef 的区别:
#ifdef 判断宏名如果被#definde 命令定义过,则为真;
#ifndef 判断宏名如果没有被 #define命令定义,则为真;

宏定义宏命令尽量都要在main()主函数之前,尽量不要在任何函数中间含有 #宏定义;

每天就这样坚持,只专注此刻当下,完成今日所需,就不怕前路漫漫

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值