预编译的相关理解及讲解

目录

1.文件包含(原函数.c与头函数.h的理解)

2.无参宏定义

3.带参宏定义

4.条件编译的理解及实践



1.文件包含(原函数.c与头函数.h的理解)

1.以.c结尾的是c语言的原函数(相信大家也知道cpp,就是c++),以.h结尾即头函数,在后面我们自定义的时候要使用(分区解决问题)

2.自己定义的头文件一般用双引号“”去调用

:#include"hello.h"//一般情况我们用“” 当然<>也可以,就是可能会找不到你文件,而且用""也方便我们区分。

示例:

#include<stdio.h>//file.c
#include"file.h"
int max1(int ,int );

void main(){
	int a=1;
	int b=2;
	int max;
	max=max1(a,b);
	printf("max=%d",max);
	

}


int max1(int ,int );//这里是头文件file.h


#include"file.h"//这里是另外一个源文件,用于写函数
int max1(int x,int y){
int max;
if(x>y)
max=x;
else
max=y;
return max;
}

2.无参宏定义

#difine 标识符(字母,_) 字符串(数字,符号,字母 all ok)

如我们原来一直用的定义一个常量 #define N 100

作用:减轻编写的难度,一般对重复的工作进行宏定义,如下

#include<stdio.h>
#define S scanf
#define P printf
#define D "%d\n"
void main(){
	int a=1;
	P("input\n");
	P(D,a);
}

 关于无参宏定义的几个注意

1.当宏名被()起来时,不会起作用如下

 2.当宏定义的字符串是一个表达式时,最为保险的写法是 在表达式两边加上括号,如下

#define N (5*5*5)

3.当想终结宏定义的范围时,使用#undef 去终结,即限定宏定义的范围到undef

3.带参宏定义

写法:#define 宏名(形参) 字符串//注意()必须紧跟宏名

作用:其实就相当于自定义函数

例如:

#include<stdio.h>
#define N(x) ((x)*(x))
void main(){
int a=5,b;
b=N(a);
printf("%d",b)
}

注意书写规范 1.在字符串中每一个形参都打括号(),且整个字符串打括号()

#define N(x) ((x)*(x))

2.并且注意宏名和()要出现空格,不然就会从(开始均当中字符串处理。

4.条件编译的理解及实践

三种形式

1.#ifdef 标识符//运行此条语句的条件是 检测到标识符已经被定义

#else

#ediff//终止

2#ifndef 标识符//运行的条件是标识符未被定义

#else

#3endif

3.#if 常量表达式//就是当常量表达式为真的时候即可

#else

#endif

总结一下,类似与函数里的选择if 但是不同在与,条件编译是选择编译,而if是全部运行,相比之下条件编译更为高效

例如 如果我们要计算一个数的平方根,或者直接输出这个数

#include<stdio.h>
#define N 1;
void main(){
int s,x;
#if N
x=s*s;
printf("x",x);
#else
printf("%d",s);
#endif
}

当然这个程序也可以用if选择去写,但是相比于条件编译就更为冗杂,条件编译只用运行一条,效率更高。


void main(){//这个你们会编写错误,因为我没给宏定义你们,你们自己猜
#if (1+1)
	P(LOVE\n);
	P(T\n);
#else
	P(W\n);
#endif
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值