结构体 联合 枚举

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

预处理命令
是在编译前期的阶段
代码-(编译)-->可执行文件(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.无参宏定义

测试代码笔记如下:

 //无参宏定义
#include<stdio.h>
#define PI 3.1415926 //定义的一个带参数的宏 作用:文本替换
#define Size 3*4+5
#define HELLO "hello world!"
#define 主函数 int main()
#define 退出 return 0; 主函数
{
printf("%lf\n", PI);
printf("%d\n", Size);
printf("%s\n", HELLO);
getchar();
退出
}

2.带参宏定义

测试代码笔记如下:

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

2019-03-28  15:13:58

C++学习(二十七)(C语言部分)之 预处理命令的更多相关文章

  1. C语言中的预处理命令

    预处理功能是C语言的重要功能. 问:为什么要预处理,什么是预处理? 答:我们知道高级语言的运行过程是通过编译程序(编译器)把源代码翻译成机器语言,实现运行的.编译程序的工作包含:语法分析.词法分析.代 ...

  2. Java开发学习(二十七)----SpringMVC之Rest风格解析及快速开发

    一.REST简介 REST(Representational State Transfer),表现形式状态转换,它是一种软件架构风格 当我们想表示一个网络资源的时候,可以使用两种方式: 传统风格资源描 ...

  3. Flutter学习二之Dart语言介绍

    上次我记录了Flutter的环境搭建,这次来简单记录一下Drat语言,Flutter是 Google推出并开源的移动应用开发框架,开发语言是Dart,那么Dart语言和其他的语言在语法上有上面区别呢, ...

  4. ElasticSearch7.3学习(二十七)----聚合概念(bucket和metric)及其示例

    一.两个核心概念:bucket和metric 1.1 bucket 有如下数据 city name  北京 张三  北京 李四 天津 王五 天津 赵六 天津 王麻子 划分出来两个bucket,一个是北 ...

  5. JavaWeb学习 (二十七)————监听器(Listener)在开发中的应用

    监听器在JavaWeb开发中用得比较多,下面说一下监听器(Listener)在开发中的常见应用 一.统计当前在线人数 在JavaWeb应用开发中,有时候我们需要统计当前在线的用户数,此时就可以使用监听 ...

  6. Salesforce LWC学习(二十七) File Upload

    本篇参考: https://developer.salesforce.com/docs/component-library/bundle/lightning-file-upload/documenta ...

  7. ballerina 学习二十七 项目k8s部署&& 运行

    ballerina k8s 部署和docker 都是同样的简单,编写service 添加注解就可以了 参考项目 https://ballerina.io/learn/by-guide/restful- ...

  8. 前端学习(二十七)存储&es6(笔记)

    cookie         存储    以站点为单位的.    必须配合服务器环境    不能跨浏览器    cookie有生命周期     默认是session        session    ...

  9. 20165318 预备作业二 学习基础和C语言基础调查

    20165318 学习基础和C语言基础调查 技能学习经验 我们这一代人,或多或少的都上过各种兴趣班,舞蹈钢琴画画书法,我也是如此.可这些技能中,唯一能拿的出手的就是舞蹈了.按照<优秀的教学方法- ...

  10. IOS学习之十七:Grand Central Dispatch(GCD)编程基础

    IOS学习之十七:Grand Central Dispatch(GCD)编程基础   有过编程经验的人,基本都会接触到多线程这块. 在java中以及Android开发中,大量的后台运行,异步消息队列, ...

随机推荐

  1. Uboot中汇编指令

    LDR(load register)指令将内存内容加载入通用寄存器 ARM是RISC结构,数据从内存到CPU之间的移动只能通过L/S指令来完成,也就是ldr/str指令.比如想把数据从内存中某处读取到 ...

  2. MATLAB 批量处理图片

    function resizephotos(directory, wh, isrecursive, isoverwrite, savetopath, supportFormat) % resizeph ...

  3. MYSQL数据库字母数字混合字段排序问题

    对MySQL数据表里的一个字符型字段排序,其内容格式为一位字母+顺序数字.数字没有前导零,长度不固定.这种含字母的数字序列,排序出来的结果和我们想要的结果是不一样的,因为它不是纯数字,只能按字符规则排 ...

  4. vue-13-插件

    Vue.js 的插件应当有一个公开方法 install MyPlugin.install = function (Vue, options) { // 1. 添加全局方法或属性 Vue.myGloba ...

  5. [HAOI2006]l旅行

    这道题...一眼看出一个暴力思虑...那就是按照生成树... 排完序之后从当前边开始向后做生成树... 统计一下答案就好了... 结果...这就是正解...QVQ...smg...我去... 呆码: ...

  6. ajax之同步异步详解

                    同步:一堆任务,按顺序去执行,只能一件件的来,如一个厨师做菜                 异步:一堆任务,可以同时进行,如多个厨师做菜                ...

  7. MAC开发配置--Node和Npm

    前往Node官网下载最新的长期支持版本Node https://nodejs.org/zh-cn/download/   默认安装目录为:     •    Node.js v10.14.2 to / ...

  8. 16位GUID

    当我们想要获得一个唯一的key的时候,通常会想到GUID.这个key非常的长,虽然我们在很多情况下这并不是个问题. 但是当我们需要将这个36个字符的字符串放在URL中时,会使的URL非常的丑陋. 想要 ...

  9. leetcode第27题:移除指定元素

    给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成 ...

  10. Ubuntu配置静态IP

    1. 输入命令:sudo vi /etc/network/interfaces 编辑文件: auto lo iface lo inet loopback auto eth0 iface eth0 in ...