C语言---预处理

预处理

#include

hello.c

gcc hello.c  //编译 

预处理 (预编译)
汇编 (汇编语言) ---助记符 


编程:
人类语言 --->编程语言(C语言)---汇编语言--->机器语言(01010)

八位的单片机 0101 0101  //加法 
             //0101 0101
16位 
32位      0101 0101 0101 0101  0101 0101  0101 0101  //add 
64位 


main()
{
   int a = 1;
   int b = 2;
   
    printf("hello world! %d \n",a+b);
}
a.out //
-----------------------------------
编译过程:
预处理   
编译
汇编
链接 

预处理:
1.宏定义
2.文件包含
3.条件编译 

1.宏定义  --- 定义了符号常量 

 #define 标识符 字符串
 #define 宏名  宏值
 #define N  100
 表示,定义了一个宏 (符号),而这个符号 代表的值 就是100 
 
 #define 宏名(参数)  宏值
 
说明:
  1. 预处理阶段,只做文本原样替换
  2. 宏 就是用 宏值 将 宏名 原样替换 
  3. 用途 
     当作常量来用
     好处,可以做到 一改全改,方便操作 
  4. 宏名 
     符合标识符命名规则
     宏名,一般都是大写 --- 主要是为了和普通变量名区分 
  5. 程序中 处于 ""中的 宏名 不会被替换 
  6. 宏名 不要和关键字重名
  7. 宏替换过程中,存在宏的副作用 ---- 文本的原样替换 
     处理:
         能加括号的尽量都加括号
  8. 宏定义 只能放在一行 
练习:
   从键盘输入 圆的半径,求出圆的周长和面积 
   L = 2 * π * r 
   S = π * r * r
   

   #include
  
   #define PI 3

  int Z(int r)
  {
      return 2*PI*r;
  }
  int M(int r)
  {
      return PI*r*r;
  }
  
  
  int main(int argc, const char *argv[])
  {
      int r;
      scanf("%d",&r);
      printf("%d\n",Z(r));
      return 0;
  }


   
   π 常量 
   
   #define PI 
   
练习:
     用带参宏,实现找两个数中的最大值 

   #include
   
   #define ADD(a,b) a+b
   #define MUL(a,b) ((a)*(b))
   #define MAX(a,b) ((a)>(b)?(a):(b))
   #define N 10
   void test(void);
   int main(int argc, const char *argv[])
   {
      int max;
      max=MAX(1,2);
      printf("max=%d\n",max);
      printf("N=%d\n",N);                                                                                                                                                                                 
 //  printf("result = %d\n",MUL(1+1,2+2));
      return 0;
 }
  #undef N
  void test(void)
 {
      printf("test N=%d\n",N);
  }
        

文件包含 
#include "文件名"   //首先在当前路径下寻找要包含的文件,找不到再到系统默认路径下寻找
#include <文件名>   //默认到系统指定路径下寻找头文件 

作用:
   将文件名代表的文件中的内容 ,替换到当前文件 

条件编译: //也是文本替换 --- 符合条件的文本 
//形式1
#ifdef 标识符
    程序段1
#else
    程序段2
#endif


//形式2
#ifdef 标识符
    程序段1
#endif 


#ifndef 标识符
    程序段1
#else
    程序段2
#endif

   #include
   #define N
   int main(int argc, const char *argv[])
   {
   #ifndef N
       printf("hello");
   #else
       printf("world");
   #endif
      return 0;
  }
       


#if    表达式
    程序段1
#else
    程序段2
#endif


多文件编程 
 main.c
  |--add.c  //自己的点c通常会包含自己的点h 
  |--add.h  //一部分是 对外的函数声明 一部分时自己的点c需要用到的头文件等内容 
  |--sub.c
  |--sub.h 
  

main.c


   #include                                      
   #include"add.h"
   #include"add.h"
   int main(int argc, const char *argv[])
   {
       int a,b;
       printf("Input two num:");
       scanf("%d%d",&a,&b);
       printf("add = %d\n",add(a,b));
      return 0;
  }
         
add.c


   int add(int a,int b)
   {
       return a+b;                                        
   }
   
add.h

   #ifndef _ADD_H_
   #define _ADD_H_
   struct stu
   {
       int sno;
       char name[20];
   };
   extern int add(int a,int b);
   #endif                                                 
           



  例题  定义一个字符串 "12345"
   要求:
     将"12345" 转化数值 12345 输出 
     写成函数 

C语言---预处理_第1张图片
     
     
   

你可能感兴趣的:(c语言,开发语言)