C语言 预处理指令
2018-09-12 本文已影响0人
超级皮波9
一 .宏定义 #define
-
宏定义
宏定义会在预处理的时候,用宏定义的值来替换宏的名称 - 定义格式
- "#define 宏名称 宏值
#define COUNT(宏名称) 5(宏值)
- 应用场景
- 企业开发分为开发阶段和部署阶段
- 例如在程序开发中会用到很多地址
#define URL "http://www.jianshu.com"
printf("%s\n",URL);
#include <stdio.h>
#define COUNT 5 //定义宏
int main(){
int arr[COUNT] = {1,5,3,6,8};
for(int i=0;i<COUNT;i++){
printf("arr[%i] = %i\n",arr[i]);
}
return 0;
}
- 注意点
- 宏定义后面不写分号 宏定义是单纯的替换
- 宏定义分为两种,一种是不带参数的宏定义,一种是带参数的宏定义
-
作用域
- 宏定义的作用域和全局变量很像,但是可以提前结束
- 从定义到文件末尾,可以通过#undef
宏名
来结束
#define COUNT 5 //定义宏
#undef COUNT // 结束宏作用域
二 .条件编译
#if
#else
#elif----->else if
#endif---->不可以省略
- 条件编译会在预处理的时候执行,所以不能取到变量的值
- 条件编译一般配合宏定义使用,两个都是在预处理的时候执行
#include <stdio.h>
#define COUNT 90 //定义宏
int main(){
#if 100 == COUNT //判断如果等于100 打印满分
printf("满分");
#elif COUNT>60 // 如果大于60 打印及格
printf("及格了");
#endif
return 0;
}
三. 文件包含#include
-
执行时间
include会在预处理的时候执行 -
#include <文件名>
会先从编译器的环境中查找对应的文件,如果没有再从系统的环境中查找对应的文件编译器--->系统
-
include "文件名"
会先从当前项目环境中查找对应的文件,如果没有再从编译器的环境中查找对应的文件,如果还是没有才会在系统中查找对应文件当前项目--->编译器环境--->系统
-
注意点
不可以重复包含文件进行导入A文件包含B文件, B文件包含A文件
四 .typedef
-
作用
给数据类型启别名 -
格式
typedef 原来数据类型名称 新的名称
-
注意点
typedef 相当于给原来的数据名称 , 定义了一个新的名字罢了
int a = 100;
typedef int ZS ---给int 定义一个名称 ZS
ZS b = 200; ----------相当于 int b = 200;
-
应用场景
typedef 一般用于给复杂的数据类型起名字,方便将来调用
例如* 结构体 * 指针 * 指向函数的指针 * 指向结构体的指针
-
给普通指针起名字
typedef char* String; ---让 char* 等于String
String name = " 简书 ";
- 给结构体/共用体/枚举起名字
- 结构体实例
#include <stdio.h>
int main(){
//1. 先定义结构体再起别名
struct Person{
char *name;
int age;
};
typedef struct Person JGT; //给结构体 (struct Person) 定义新名字== JGT
JGT p; // 定义结构体变量等于-----> struct Person p
p.age = 23;
//2. 定义的同时起别名
typedef struct Person{
char *name;
int age;
} JGT;
JGT p;
p.age = 23;
//3. 定义同时起别名 省略结构名称 企业经常使用的方法
typedef struct{
char *name;
int age;
} Person;
Person p; //定义结构体变量
return 0;
}
- 给指向函数的指针起别名
-
注意点
如果给指向函数的指针起别名, 那么指针名称就是别名 企业开发经常使用, 随处可见
#include <stdio.h>
int sum(int a,int b){
return a + b;
}
int main(){
//以前建立指向函数的指针
int (*funcP)(int,int) = ∑
int res = funcP(10,20);
printf("res = %i\n",res); // res = 30
//typedef 建立指向函数的指针 果给指向函数的指针起别名, 那么指针名 (funcP1) 就是别名
typedef int(*funcP1)(int,int);
funcP1 plus = ∑ // 建立指针plus == 函数sum的地址
int res2 = plus(4,5);
printf("res2 = %i\n",res2); // res2 = 9
return 0;
}
五 . const 关键字
-
const 用于定义一个常量
-
格式
const-->const 数据类型 变量名称;
-
**注意点
-181--20180912 未整理完