• C++学习(二十七)(C语言部分)之 预处理命令


     结构体 联合 枚举 

    联合 只能保存最后赋值的结果
    枚举 所有可能值列出来

    预处理命令
    是在编译前期的阶段
    代码-(编译)-->可执行文件(exe)
    预编译 编译前对代码处理
    *1.插入头文件的内容 #include<stdio.h>
    *2.宏定义替换
    3.删除注释--->注释在预处理阶段全部被删除
    *4.条件编译

    #----> 预处理符号

     

    1.宏定义 #define
    主要作用 定义一个宏 用于文本替换
    宏 没有类型可言
    1.1无参宏定义
    多用于常数的替换
    可以不用一个一个的去修改常量
    常用于常量 字符串 表达式 方便于检查和修改
    注意 不能重复定义
    1.2带参宏定义
    带参的宏 使用和函数类似
    1.只是简单地替换 不检查类型 一般用它替换简单的函数
    2.直接替换 不会先计算 也不会检查类型 (所以要注意有先级的问题)

    函数的参数需要声明类型 宏定义不需要

    带参宏定义 主要 替换简单函数(会比函数快)
    代码比较长的函数就不适用了

     

    2.文件包含

    #include
    包含函数定义

    #include<stdio.h>//系统提供的 一般用<>
    #include"stdio.h"//自己写的头文件用""

    区别:
    <>查找范围在系统的文件下(如果找不到就显示找不到)
    ""查找范围-->现在当前文件下寻找,如果找到就直接使用 如果找不到就在系统文件下寻找 如果找不到就报错

    自己写的头文件在项目文件夹下只能用""
    系统提供的头文件 <>会查找的快一点

    添加方式如下:

    然后在源文件部分创建一个同名的.cpp文件  *****一定要同名*****

    例如:

    自己写的头文件

    1.添加一个.h文件 和添加一个同名的.cpp文件
    2..cpp文件包含头文件
    3.函数声明放在.h里面 定义放在.cpp中
    函数声明定义全放在.h中也可以
    注意:1.如果放在.cpp里面的函数需要调用其他函数 可以在.h里面包含自己想要的头文件
    2.定义之后 项要使用这个函数 只需要在代码中包含对应的头文件即可
    3.防止头文件的相互包含
    a.h b.h
    a.h包含b.h 同时b.h包含a.h 文件相互包含 会导致错误

    注意:1.一般预处理命令 后面最好不要加分号 

     

    3.条件编译

    #if //后面跟着一个条件 条件如果成立就执行后面的语句 编译时候包含后面几句 编译之前可以确定的条件
    #endif //结束

    #elif //后面也会接条件 else if 不可以单独使用
    #else //不可以单独使用

    #ifndef //if not define 宏的作用只是判断头文件是否被包含
    包含头文件的时候定义一个宏 表示头文件已经包含过了,避免头文件的重复包含
    #ifndef _INC_STDIO //若果没有定义,那么就定义一个宏
    #define _INC_STDIO
    #pragma once //防止头文件重复包含 这个文件只会包含一次

    #error
    #pragma once 头文件只包含一次
    #pragma comment(LIB,"WINIMMM.LIB")
    #pragma pack(n) 控制结构体对齐的


    一、宏定义

    1.无参宏定义

    测试代码笔记如下:

     1 //无参宏定义
     2 #include<stdio.h>
     3 #define PI 3.1415926  //定义的一个带参数的宏 作用:文本替换
     4 #define Size 3*4+5
     5 #define HELLO "hello world!"
     6 #define 主函数 int main()
     7 #define 退出 return 0;
     8 
     9 主函数
    10 {
    11     printf("%lf
    ", PI);
    12     printf("%d
    ", Size);
    13     printf("%s
    ", HELLO);
    14     getchar();
    15     退出
    16 }

    2.带参宏定义

    测试代码笔记如下:

     1 //带参宏定义
     2 #include<stdio.h>
     3 #define M(a,b)(a+b)
     4 #define POW(a,b)(a*b)
     5 //可选值不较少 可以直接用#define定义
     6 //可选值比较多 可以用枚举比较方便
     7 int main()
     8 {
     9     printf("%d
    ", M(3, 4));
    10     printf("%d
    ", POW(3, 4));//POW(3,4)换成3*4  只是替换没有传参
    11     printf("%d
    ", POW(3+4, 4));//POW(3+4,4)--->3+4*4 先替换,再计算
    12     getchar();
    13     return 0;
    14 }

    2019-03-28  15:13:58

  • 相关阅读:
    解决web网页访问慢的问题
    Django安装配置(for Mac)
    Django安装(for Mac)
    HTML5中的新事件
    关于http-equiv
    【转】@fant-face
    textarear中的value....还是...innertext
    清除浮动的元素的margin-top触碰不到,浮动元素的边界
    常用排序算法总结(一)
    JS常用特效方法总结
  • 原文地址:https://www.cnblogs.com/Yuuki-/p/10614020.html
Copyright © 2020-2023  润新知