您现在的位置是:首页 >技术教程 >C的预处理网站首页技术教程

C的预处理

十八度762 2025-02-10 10:02:31
简介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


 



 

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。