结构体 联合 枚举

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

预处理命令
是在编译前期的阶段
代码-(编译)-->可执行文件(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. POJ 2243 Knight Moves(BFS)

    POJ 2243 Knight Moves A friend of you is doing research on the Traveling Knight Problem (TKP) where ...

  2. CSS技巧-文字分散对齐的方法

    下面的代码可以在IE中实现文字分散对齐: <table width="300" align="center">    <tr>      ...

  3. Mysql 实列结构-进程

    一.MySQL后台进程简介 master thread与四大I/O线程:read thread.write thread.redo log thread.change buffer thread与 p ...

  4. EF-关于类库中EntityFramework之CodeFirst(代码优先)的操作浅析

    前有ADO.NET,后有ORM模式的EntityFramework.这两种技术都实现了对数据库的访问操作.如果要说哪种技术好,就看项目架构的大小,使用者的熟练程度等等,毕竟萝卜白菜,各有所爱. 今天要 ...

  5. bind配置文件

    options{} - 整个bind使用的全局配置选项 bind监听的端口,数据文件存储位置,缓存的存储位置,权限加密的控制 logging{}- 服务日志选项 日志输出的位置,以及输出的级别 zon ...

  6. :观察者模式--Weather

    #ifndef __WEATHER_H__ #define __WEATHER_H__ #include <list> #include <iostream> using na ...

  7. PE文件 01 导入表

    0x01  导入表结构  数据目录表中的第二个成员标记了导入表的RVA和Size大小,由此可以定位到导入表: typedef struct _IMAGE_DATA_DIRECTORY { DWORD ...

  8. OJ_查找二叉树

    #include<iostream>using namespace std;int n,m;int d[120];int t=1;int re;struct Node{ int data; ...

  9. Java基础-数据类型和包装类

    数据类型 分为基本数据类型和引用数据类型 基本数据类型变量存储的就是数据本身,引用数据类型的变量是保存数据的空间地址 四种基本数据类型: 逻辑型 boolean 文本型 char 整数型 byte s ...

  10. loader 的理解

    [ webpack3.0.0刚刚出来  所以文章是跟着低版本 教程 操作熟悉  结果好多对不上喔] 四:理解less-loader加载器的使用 我们先来理解下less-loader加载器,其他的sas ...