您现在的位置是:首页 >技术教程 >C的预处理网站首页技术教程
C的预处理
简介C的预处理
一、编程
编程:
人类语言 --->编程语言(C语言)---汇编语言--->机器语言(01010)
过程:
二、预处理
1. 宏定义
如果文件中多次使用到某一常量,可以将其定义为宏,后续实现一改全改
基本格式:
1. 定义符号常量
表示定义的宏符号N值为100, 宏 就是用 宏值 将 宏名 原样替换
#define N 100
例,在下面main函数中的符号 n 代表数值10
1 #include<stdio.h>
2
3 #define n 10
4
5 int main()
6 {
7 int a[n]={1,2,3,4,5,6,7,8,9,0};
8 int i=0;
9
10 for(i=0;i<n;i++)
11 {
12 printf("a[%d]=%d
",i,a[i]);
13
14 }
15 return 0;
16 }
2. 定义宏函数
带参宏(宏函数)的参数没有类型
#define sub(a,b) (a)*(b)
例
1 #include<stdio.h>
2
3 #define Mul(a,b) (a)*(b)
4 #define Sub(a,b) (a)/(b)
5
6 int main()
7 {
16 int m=Mul(1+1,2+2);
17 printf("m=%d
",m);
18
19 int sub=Sub(2+2,2);
printf("sub=%d
",sub);
20 return 0;
21
22 }
注意:
1. 宏定义一般来说只占一行,如果需要多行宏定义,每多的行都要使用 ''--->续行符
2. 宏定义的作用范围:从定义开始作用到整个文件内,如果中途不需要宏,可以使用解除宏命令,#undefine
3. 宏替换的过程是简单的文本替换,不涉及计算。因此如果替换的参数如需运算最好加上括号以提高运算优先级
2. 文件包含
作用:
将文件名代表的文件中的内容 ,替换到当前文件
例如,编写头文件实现一个日历查找功能(部分代码)
//头文件
1 #ifndef _OTHER_H_ // 避免重复定义
2 #define _OTHER_H_
3
4 extern int getAllDays(int year,int month);
5 extern int getMonthDays(int year,int month);
6 extern int weekDays(int year,int month);
7 extern int leapYear(int year);
8
9 #endif
//主函数
1 #include<stdio.h>
2 #include"other.h"
3
4 int main()
5 {
6 int y,m;
7 printf("please input year and month:
");
8 scanf("%d %d",&y,&m);
9 putchar('
');
10 printf("%10d %d
",y,m);
11 putchar('
');
12
13 printf("日 一 二 三 四 五 六
");
14
15 int n= (getAllDays(y,m)-getMonthDays(y,m)+1)%7;
16 for(int k=0;k<n;k++)
17 {
18 printf(" ");
19 }
20
21 for(int j=1;j<=getMonthDays(y,m);j++)
22 {
23 if((j+n-1)%7==0)
24 {
25 putchar('
');
26 }
27 if(j<10)
28 {
29 printf("%d ",j);
30 }
31 else
32 {
33 printf("%d ",j);
34 }
35 }
36 putchar('
');
37 return 0;
38 }
39
3. 条件编译
条件编译也是文本替换的一种
形式:
//形式1
#ifdef 标识符
程序段1
#else
程序段2
#endif
//形式2
#ifdef 标识符
程序段1
#endif
#ifndef 标识符
程序段1
#else
程序段2
#endif
#if 表达式
程序段1
#else
程序段2
#endif
例如:
9 #if 1
10 printf("it's okay
");
11 #else
12 printf("No!
");
13 #endif
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。