美文网首页
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 未整理完

相关文章

  • iOS开发 -- C语言基础12(预处理指令)

    iOS开发 -- C语言基础12(预处理指令) 宏定义 预处理指令简介 1.C语言在对源程序进行编译之前,会先对一...

  • 第5周:程序结构——5.2 编译预处理和宏

    1.编译预处理指令 # 开头的是编译预处理指令(其他语言也可使用,include 不是 C 语言关键字)。 它们不...

  • 我的C语言学习笔记

    第一个C语言程序: 1.#include 是C语言的预处理指令,所谓预处理指令就是在编译之前作得处理,通常以#开头...

  • 1. C语言的编译步骤

    1. C语言的编译步骤 1.1 预处理 带#的语句就是预处理指令, 预处理指令在预处理的时候处理了 头文件展开: ...

  • include作用

    #include的作用 #include 是C语言的预处理指令之一,所谓预处理指令,就是在编译之前做的处理,预处理...

  • C语言学习笔记

    1. C的预处理器 .h头文件 #include是C语言的预处理指令,C语言编译器在编译前会对源码进行预处理工作。...

  • C语言003——基本概念

    C语言003——基本概念 一个简单的C程序基本具备如上所示的结构,包括:预处理指令,函数和语句。 预处理指令 在编...

  • #include指令 和 import

    #include 是C语言的预处理指令之一,所谓预处理,就是在编译之前做的处理,预处理指令一般以 # 开头 #in...

  • 宏定义

    宏定义 编译预处理指令 开头的是便有意与处理指令 他们不是C语言的成分,但是C语言程序离不开他们 define用来...

  • C语言预处理指令

    预处理指令 宏定义 宏定义会在预处理的时候, 用宏定义的值来替换宏的名称 格式: #define 宏名称 宏值 应...

网友评论

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

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