目录
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
}