美文网首页
C语言 预处理指令

C语言 预处理指令

作者: 超级皮波9 | 来源:发表于2018-09-12 17:36 被阅读0次

    一 .宏定义 #define

    • 宏定义
      宏定义会在预处理的时候,用宏定义的值来替换宏的名称
    • 定义格式
    • "#define 宏名称 宏值
    #define COUNT(宏名称)  5(宏值)
    
    • 应用场景
    1. 企业开发分为开发阶段和部署阶段
    2. 例如在程序开发中会用到很多地址
    #define URL "http://www.jianshu.com"
    
    printf("%s\n",URL);
    
    #include <stdio.h>
    
    #define COUNT 5 //定义宏
    
    int main(){
    
        int arr[COUNT] = {1,5,3,6,8};
        for(int i=0;i<COUNT;i++){
            printf("arr[%i] = %i\n",arr[i]);
        }
        return 0;
    }
    
    • 注意点
    1. 宏定义后面不写分号 宏定义是单纯的替换
    2. 宏定义分为两种,一种是不带参数的宏定义,一种是带参数的宏定义
    • 作用域
    • 宏定义的作用域和全局变量很像,但是可以提前结束
    • 从定义到文件末尾,可以通过#undef 宏名来结束
    #define COUNT 5  //定义宏
    
    #undef COUNT  // 结束宏作用域
    

    二 .条件编译

        #if
        #else
        #elif----->else if
        #endif---->不可以省略
    
    • 条件编译会在预处理的时候执行,所以不能取到变量的值
    • 条件编译一般配合宏定义使用,两个都是在预处理的时候执行
    #include <stdio.h>
    
    #define COUNT 90 //定义宏
    
    int main(){
    
    #if 100 == COUNT  //判断如果等于100 打印满分
        printf("满分");
    #elif COUNT>60   // 如果大于60 打印及格
        printf("及格了");
    #endif
    
        return 0;
    }
    

    三. 文件包含#include

    • 执行时间
      include会在预处理的时候执行

    • #include <文件名>
      会先从编译器的环境中查找对应的文件,如果没有再从系统的环境中查找对应的文件

         编译器--->系统              
      
    • include "文件名"
      会先从当前项目环境中查找对应的文件,如果没有再从编译器的环境中查找对应的文件,如果还是没有才会在系统中查找对应文件

         当前项目--->编译器环境--->系统
      
    • 注意点
      不可以重复包含文件进行导入

        A文件包含B文件, B文件包含A文件
      

    四 .typedef

    • 作用
      给数据类型启别名

    • 格式

       typedef  原来数据类型名称  新的名称
      
    • 注意点
      typedef 相当于给原来的数据名称 , 定义了一个新的名字罢了

    int  a = 100;
    
    typedef  int  ZS  ---给int 定义一个名称 ZS
    
    ZS b = 200;  ----------相当于 int b = 200;
    
    • 应用场景
      typedef 一般用于给复杂的数据类型起名字,方便将来调用
      例如

        * 结构体
        * 指针
        * 指向函数的指针
        * 指向结构体的指针
      
    • 给普通指针起名字

    typedef  char*  String;  ---让 char*  等于String
    String name = " 简书 ";
    
    • 给结构体/共用体/枚举起名字
    • 结构体实例
    #include <stdio.h>
    
    int main(){
    
        //1. 先定义结构体再起别名
        struct Person{
            char *name;
            int age;
        };
    
        typedef struct Person  JGT;  //给结构体 (struct Person) 定义新名字== JGT 
        
        JGT p;  // 定义结构体变量等于-----> struct Person p
        
        p.age = 23;
        
        //2. 定义的同时起别名
        typedef struct Person{
            char *name;
            int age;
        } JGT;
        
        JGT p;
        
        p.age = 23;
        
        //3. 定义同时起别名 省略结构名称 企业经常使用的方法
        typedef struct{
            char *name;
            int age;
        } Person;
        
        Person p;  //定义结构体变量
                  
        return 0;
    }
    

    • 给指向函数的指针起别名
    • 注意点
      如果给指向函数的指针起别名, 那么指针名称就是别名 企业开发经常使用, 随处可见
    #include <stdio.h>
    
    int sum(int a,int b){
        return a + b;
    }
    
    int main(){
    
        //以前建立指向函数的指针
        int (*funcP)(int,int) = &sum;
    
        int res = funcP(10,20);
    
        printf("res = %i\n",res);  // res = 30
    
        //typedef 建立指向函数的指针 果给指向函数的指针起别名, 那么指针名 (funcP1) 就是别名
        typedef int(*funcP1)(int,int);
    
        funcP1 plus = &sum;  // 建立指针plus == 函数sum的地址
    
        int res2 = plus(4,5);
    
        printf("res2 = %i\n",res2); // res2 = 9
    
        return 0;
    }
    

    五 . const 关键字

    • const 用于定义一个常量

    • 格式

      const-->const 数据类型 变量名称;
      
    • **注意点
      -181--20180912 未整理完

    相关文章

      网友评论

          本文标题:C语言 预处理指令

          本文链接:https://www.haomeiwen.com/subject/cfgvgftx.html