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\n", pi); 12 printf("%d\n", size); 13 printf("%s\n", 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\n", m(3, 4)); 10 printf("%d\n", pow(3, 4));//pow(3,4)换成3*4 只是替换没有传参 11 printf("%d\n", pow(3+4, 4));//pow(3+4,4)--->3+4*4 先替换,再计算 12 getchar(); 13 return 0; 14 }
2019-03-28 15:13:58