• 十二、预处理


    预处理命令
    三个主要的组成
    1.宏定义替换
    2.头文件包含
    3.条件编译


    主要 多文件的写法

    代码--->编译--->可执行文件(exe)
    编译之前的预处理阶段(删掉注释 宏定义 包含头文件 条件编译)

    1.宏定义 作用 替换文本
    #define 定义一个宏
    #define 宏名 要替换的内容
    一般宏后面不写分号
    宏 直接替换 可以是任意内容


    带参宏 类似函数
    #define ADD(a,b) a+b
    将ADD替换成a+b的形式 本质上是对文本操作
    printf("%d ",ADD(3,4));
    只适用简单的操作(里面不能有循环和递归)
    直接替换
    好处 函数 调用函数(需要跳转时间) 简单的函数用宏替换 不需要跳转时间
    没有参数类型限制 比函数灵活

    printf("ADD(3,4)=%d ",ADD(3,4)*5);//3+4*5
    先替换然后计算 需要注意优先级问题

    2.头文件包含
    #include<头文件名字>
    #include"头文件名字"
    头文件 把头文件内容 直接复制到代码前面

    < > 一般包含自带的头文件 stdio.h 到指定目录查找
    " " 一般自己写的头文件 到项目文件夹中找 然后找系统指定目录(系统头文件所在目录)

    函数
    void fun()定义
    {printf("helloworld")}
    函数定义放在.h中 函数申明放在.c中

    3.条件编译 根据某些条件 判断下面的语句是否编译

    #if

    #endif

    #ifndef if not define 判断宏是否定义过 如果没有定义过 后面的语句就会被定义 否则就不会被定义
    条件为真 后面都会被定义 调教为假 后面都不会被定义
    #endif

    #define

    在头文件里面设置一个宏 如果包含过 就定义一下这个宏
    判断这个红有没有定义过 如果有 说明之前包含过


    多字节字符集 Unicode 字符集
    处理方式也是不一样的
    判断使用哪一种字符集
    然后写出对应的函数

    函数定义

    1 void fun();
    2 void insist();
    insist.h

    函数申明

    1 #include <stdio.h>
    2 #include "insist.h"
    3 void fun()
    4 {
    5     printf("helloworld
    ");
    6 }
    7 void insist(){
    8     printf("insist niubi
    ");
    9 }
    insist.c

    主函数

     1 #pragma once//防止头文件重复包含  包含头文件  ---->复制头文件内容
     2 //防止重复包含
     3 #include <stdio.h>
     4 #include "insist.h"
     5 #define 主函数 int main()
     6 #define ROW 20
     7 #define ADD(a,b) a+b 
     8 #define HELLO "helloworld"
     9 #define M(a) a>=0?a:a<=10?-a:0
    10 #define POW(a,b) (a*b)
    11 //上面已经定义过了ROW 所以后面就不会定义了
    12 #ifndef ROW
    13 #define ADD(a,b) a+b 
    14 #define HELLO "helloworld"
    15 #define M(a) a>=0?a:a<=10?-a:0
    16 #define POW(a,b) (a*b)
    17 #endif
    18 主函数
    19 {
    20     insist();
    21     fun();
    22     printf("%d
    ",ADD(3,4));
    23     printf("ADD(3,4)=%d
    ",ADD(3,4)*5);//3+4*5需要注意优先级问题
    24     printf("%d
    ",M(3));//返回3
    25     printf("%d
    ",POW(3+4,4+5));//3+4*4+5=3+16+5=24;
    26         printf("%s
    ",HELLO);
    27 #if 0//直接注释
    28     int i;
    29     printf("%d
    ",ADD(3,4));
    30     printf("ADD(3,4)=%d
    ",ADD(3,4)*5);//3+4*5需要注意优先级问题
    31     printf("%d
    ",M(3));//返回3
    32     printf("%d
    ",POW(3+4,4+5));//3+4*4+5=3+16+5=24;
    33     for (i=0;i<ROW;i++)
    34     {
    35         printf("%s
    ",HELLO);
    36     }
    37 #endif
    38     getchar();
    39     return 0;
    40 
    41 }
  • 相关阅读:
    Windows 10 Universal App 开发记录
    Windows Phone 8.1 开发会用到的方法
    Android Activity设置全屏
    Android视频录制命令screenrecord
    Android ScrollView中嵌套ListView只显示一行的解决办法
    Android 4.4.4: java.lang.SecurityException: Package com.android.settings does not belong to 1001
    自定义Android spinner样式并添加监听事件
    GSON快速实现内部类
    android的Banner轮播图框架
    Okhttp与Okhttputils的用法及区别
  • 原文地址:https://www.cnblogs.com/liugangjiayou/p/11801635.html
Copyright © 2020-2023  润新知