c语言预处理,包含(宏定义,包含,条件编译)
来源:互联网 发布:可以下载的软件 编辑:程序博客网 时间:2024/05/19 13:22
预处理器介绍:就是三个方面,宏定义,文件包含和条件编译
0:预处理是一个小软件,可以在编译器编译程序之前对源程序进行编辑,例如出书之前,编辑线看看你这个书写的通不通顺
1:预处理器可以处理一些预编译指令,这些预处理指令包括:
2:预处理的工作原理
3:预处理指令有哪些
4:宏定义,把这个学会了,c语言学习的就非常好了,宏定义可以理解为全局变量,但又不是全局变量,因为全局变量是在使用的时候,宏定义是在编译的时候用到的
5:条件编译:条件编译是是否编译,而if else 是一定会编译的只是执行不执行的问题
上面的编译结果片段:因为当前的VERSION为4,所以编译,
修改VERSION为3,
这个时候编译久没有那一行了
+++++++++++++++++++++++++++++++++++++++++++++++++
0:预处理是一个小软件,可以在编译器编译程序之前对源程序进行编辑,例如出书之前,编辑线看看你这个书写的通不通顺
1:预处理器可以处理一些预编译指令,这些预处理指令包括:
宏定义:#defince
文件包括 #include,系统的文件的包含是<>,例如<stdio.h>我们自己写的头文件使用”” 例如“hello.h”
条件编译 #if #ifdef #ifndef #elif #else #endif
2:预处理的工作原理
预处理器可以在编译器对c程序进行编译之前,进行重新编译(修改源代码)工作
这个过程包括:
2.1 将使用#define 指令进行的宏定义进行匹配替换
2.2 将使用#include 指令包含的头文件添加到当前文件中
2.3 将预定义指令删除
2.4 删除注视
2.5 可以使用gcc -E Hello.c 查看预编译器的输出结果,例如下面程序输出结果将包含stdio.h到当前文件,并且替换宏定义
#include <stdio.h>#define SIZE 20int main(){int i[SIZE];//Hello World is 11 words;printf("Hello World\n");return 0;}然后执行gcc -E Hello.c0:include的一些东西,stdio.h文件里面的内容都会显示1:SIZE 替换成了202:主食修改了int main(){ int i[20]; printf("Hello World\n"); return 0;}
3:预处理指令有哪些
3.1 宏定义,marcos #define 指令定义了一个宏,#undef 指令删除一个宏,可以理解为系统变量,但是有区别的
3.2 文件包括,#include 指令将包含当前文件到程序中
3.3 条件编译 #if,#ifdef,#ifndef,#elif,#else和#endif,将包含代码块到程序当中,或将代码块排除在程序外。
既然有if else 那么问什么还要条件变异,这个是条件编译,如果不成功,我都不给你翻译的
预定义指令的规则:一般都是以#打头,并且不是必须定义在程序的开始位置(虽然都是这样定义的)指令之间可以插入人意空格,例如# define N指令总是在第一个换行处结束,除非使用\字符续行,例如,下面是cocos2d-x游戏引擎中的一个定义代码#define CREATE_FUNC(_TYPE_)\static _TYPE_*create()\{\_TYPE_*pRet = new _TYPE_();\….注释可以和指令在同一行里面#define N 15 /*定义数组大小*/
4:宏定义,把这个学会了,c语言学习的就非常好了,宏定义可以理解为全局变量,但又不是全局变量,因为全局变量是在使用的时候,宏定义是在编译的时候用到的
#define SIZE 20
不能写成
#define SIZE = 20
不能写成//#define SIZE 20 是一条命令而不是一条语句;所以不能以;结尾
#define SIZE 20;
4.2宏定义可以对c语法结构作出修改,例如:可以吧{}定义为BEGIN 定义成{ ,END定义成 }
#define BEGIN {
#define END }
4.3 可以进行类型定义,例如#define BOOL int
4.4 控制条件编译,例如: #define DEBUG 1,在程序完成后把1改为0,调试信息将不再输出。
4.5 带参数的宏定义
比较两个数的大小,和函数有什么区别呢?
4.6 #运算符,将参数转换为字符串字面量,例如#define PRINT_INT(x) printf(#x”=%d\n”,x);
就是有了#号后,后面就是x 是什么值替换为什么值
#include <stdio.h>#define COLOR blue;#define VERSION 4#define MAX(x,y) ((x)>(y)?(x):(y))/* x>y?x:y 所有有参数的地方都用括号括起来*/#define PRINT_INT(x) printf(#x"=%d\n",x)int main(int argc, const char * argv[]) { // insert code here... printf("Hello, World!\n"); //1. color =COLOR; //2. color = COLOR; int a = 100,b=2; int r = a>b?a:b; printf("%d\n",r); //宏定义的使用,那么和函数有什么区别呢? int rmarco = MAX(a,b); printf("%d\n",rmarco); //输出:10=10 PRINT_INT(10); return 0;}
##运算符讲两个标识符链接在一起例如:#define MK_ID(id) n##id
#include <stdio.h>#define MK_ID(id) n##idint main(int argc, const char * argv[]) { int MK_ID(1),MK_ID(2); return 0;}使用gcc -E hello.c的命令进行编译后得到:int main(int argc, const char * argv[]) { int n1,n2; return 0;}
4.5 宏定义的嵌套定义
#include <stdio.h>#define PI 3.14#define PI2 PI*2int main(int argc, const char * argv[]) { float rs = 3.0; float s = 2*PI*rs; printf("s=%f\n",s); s=PI2*rs; printf("s=%f\n",s); return 0;}
4.8 系统预定义宏:
//系统预定义的宏 printf("当前的行数line =%d\n",__LINE__); printf("原文件名称=%s\n",__FILE__); printf("编译日期=%s,编译时间=%s\n",__DATE__,__TIME__); printf("编译器是否支持c标准=%d\n",__STDC__);
5:条件编译:条件编译是是否编译,而if else 是一定会编译的只是执行不执行的问题
#include <stdio.h>#define VERSION 4int main(int argc, const char * argv[]) { //条件编译#if VERSION==4 printf("这里要编译,只有当满足条件的时候才编译\n");#endif if(VERSION){ printf("一定编译,只是执行不执行的问题"); } return 0;}
上面的编译结果片段:因为当前的VERSION为4,所以编译,
int main(int argc, const char * argv[]) { printf("这里要编译,只有当满足条件的时候才编译\n"); if(4){ printf("一定编译,只是执行不执行的问题"); } return 0;
修改VERSION为3,
这个时候编译久没有那一行了
int main(int argc, const char * argv[]) { if(4){ printf("一定编译,只是执行不执行的问题"); } return 0;}
+++++++++++++++++++++++++++++++++++++++++++++++++
//// main.c// MarcosTest//// Created by 千 on 16/7/19.// Copyright © 2016年 kodulf. All rights reserved.//#include <stdio.h>#define COLOR blue;#define VERSION 4#define MAX(x,y) ((x)>(y)?(x):(y))/* x>y?x:y 所有有参数的地方都用括号括起来*/#define PRINT_INT(x) printf(#x"=%d\n",x)#define MK_ID(id) n##id#define PI 3.14#define PI2 PI*2int main(int argc, const char * argv[]) { // insert code here... printf("Hello, World!\n"); //1. color =COLOR; //2. color = COLOR; int a = 100,b=2; int r = a>b?a:b; printf("%d\n",r); //宏定义的使用,那么和函数有什么区别呢? int rmarco = MAX(a,b); printf("%d\n",rmarco); //输出:10=10 PRINT_INT(10); int MK_ID(1),MK_ID(2); float rs = 3.0; float s = 2*PI*rs; printf("s=%f\n",s); s=PI2*rs; printf("s=%f\n",s); //系统预定义的宏 printf("当前的行数line =%d\n",__LINE__); printf("原文件名称=%s\n",__FILE__); printf("编译日期=%s,编译时间=%s\n",__DATE__,__TIME__); printf("编译器是否支持c标准=%d\n",__STDC__); //条件变异//#if VERSION==4#if VERSION ==3 printf("这里要编译,只有当满足条件的时候才编译\n");#endif if(VERSION){ printf("一定编译,只是执行不执行的问题"); } return 0;}
0 0
- c语言预处理,包含(宏定义,包含,条件编译)
- C 预处理(宏定义,文件包含,条件编译)
- IOS开发---C语言-㉑预处理指令:宏定义、条件编译、文件包含
- c语言三种预处理--宏定义,文件包含,条件编译
- C语言预处理指令:宏、条件编译、文件包含
- 预处理(宏定义、文件包含、条件编译)
- 预处理(宏定义、文件包含、条件编译)
- C/C++编译预处理:宏定义指令、文件包含指令、条件编译指令和特殊符号处理
- 预处理 之 宏定义、文件包含、条件编译
- 15-预处理指令1-宏定义、条件编译、文件包含
- 预处理指令—宏定义,条件编译,文件包含
- 三种预处理功能 : 宏定义 --文件包含 -- 条件编译 import include 常用c/c++库
- C语言学习入门 (六) 预处理指令:宏、条件编译、文件包含
- C语言学习入门 (六) 预处理指令:宏、条件编译、文件包含
- C语言学习入门 (六) 预处理指令:宏、条件编译、文件包含
- c-3 预处理指令 宏 条件编译 文件包含
- 黑马程序员--IOS学习笔记总结 预处理指令(宏定义、条件编译、文件包含)
- 黑马程序员——C语言——宏定义、条件编译、文件包含等
- Win 7 下扩展opencv_contrib的OpenCV3.1.0+VS2012的开发配置
- 文章标题
- 最佳边割集
- 视频资源
- CocosCreator坐标代码
- c语言预处理,包含(宏定义,包含,条件编译)
- Linux之进程
- odex to dex boot.oat
- 代码:win10风格的资源树
- 欢迎使用CSDN-markdown编辑器
- 02 OC之 字符串的使用
- 对齐方式的解释
- spring 第三章节 高级装配
- js基础学习之--仿百度登录鼠标拖拽事件