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

原文地址:https://www.cnblogs.com/Yuuki-/p/10614020.html