如何系统学习C 语言(下)之 预处理命令篇
大话c语言(下)之 预处理命令篇
预处理就是在编译之前,通过一些预处理命令对源代码进行管理和控制的过程。
由源代码得到可执行的程序,会经过预处理、编译、汇编和链接几个过程
预处理命令大致可以分为文件包含、宏和条件编译几个部分,所有的预处理命令都是以“#”开头的。
这里只分享几个常见的预处理命令,至于一些不常见的,还是那句话,我们可以在需要用到它的时候再去学,到实践中去学。
一,文件包含
1,头文件
头文件也是一个文本文件,在C语言中,源文件通常都是以.c作为文件名的后缀,而头文件则是以.h作为文件名的后缀。在进行程序的编译时,需要对源文件进行编译,而头文件是不参与编译过程的。
2,#include命令
include命令用于包含头文件,即将一个指定的头文件的内容包含至当前文件中。
二,宏
最初设计宏的目的就是为了便于代码的维护,而随着技术的不断发展,目前可以通过宏实现代码管理、流程控制、错误和异常检测等功能。
对源文件进行编译前,预处理器会对源代码中的宏进行文本替换处理,即将宏名部分替换为所对应的宏值部分。因此,也常将这种宏处理的行为称为宏替换或宏展开。
1,宏的定义
可以通过#define 命令来定义一个宏。如下:
#define 宏名 宏值
宏名是一个标识符,为所定义宏的名字,可使用在源代码中。宏值为宏名所对应的值,它可以是一个常数、表达式、字符、字符串等。需要注意的是,宏定义并非C语言的语句,因此最后不需要加上分号。
简单体会一下宏:
#include<stdio.h>
#define LEN 10 //宏定义
int main(){
for(int i=1;i<=LEN;i++) //使用宏
printf("%d ",i*10);
return 0;
}
在使用宏的时候,要特别需要注意的是:预处理器对宏的处理只是简单的替换行为:
#include<stdio.h>
#define NUM 2+3
int main(){
int n=NUM*NUM;
printf("n=%d\n",n);
return 0;
}
上面这段代码的输出值是多少呢?是25吗?结果并不是25!该程序编译运行后,结果为n=11。因为经过宏替换后,源代码中的语句"int n=NUM*NUM;"会被替换为"int n=2+3 * 2+3;" 因此结果便为"2+6+3",结果为11。
那怎么改一下子,结果才为25呢?只需要将宏按如下定义即可:
#define NUM(2+3)
说了这么多,简单的说,宏就是让我们知道去简单替换!
如何系统学习C 语言(下)之 预处理命令篇的更多相关文章
- C语言中的预处理命令
预处理功能是C语言的重要功能. 问:为什么要预处理,什么是预处理? 答:我们知道高级语言的运行过程是通过编译程序(编译器)把源代码翻译成机器语言,实现运行的.编译程序的工作包含:语法分析.词法分析.代 ...
- 如何系统学习C 语言(上)之 基础篇
大话C 语言(一) 初识C 语言 老实说,上大学之前我根本不知道什么是C 语言,所以当初学校开设这门课时,我是充满了好奇,所以当初我翻阅了大量的C 语言入门书籍,千篇一律,都是从一些概念.术语和理论讲 ...
- 系统学习 javaweb2----HTML语言2
感想:学习javaweb之路,任重而道远. 学习笔记: 5.表格标签 5.1<table></table> 表格标签,用于效果中定义一个表格 5.2<tr>< ...
- Unity3D 装备系统学习Inventory Pro 2.1.2 基础篇
前言 前一篇 Unity3D 装备系统学习Inventory Pro 2.1.2 总结 基本泛泛的对于Inventory Pro 这个插件进行了讲解,主要是想提炼下通用装备系统结构和类体系.前两天又读 ...
- 如何系统学习C 语言(下)之 文件篇
我们所编写的程序源代码以及编译生成的可执行文件都属于文件.所以文件的实质就是存储在外部存储介质上的一段连续的二进制数据. c 语言程序对文件的处理采用文件流的形式,程序运行在内存中,而文件是存储在外部 ...
- 系统学习javaweb1----HTML语言1
自我感受:HTML语言没想到也有这么大的学问,竟然能通过超链接标签直接访问百度,这可让我大吃一惊,我也得反思一下自己,上学期的java纯是混过来的,没有系统的学习过,感觉能通过期末考试都是侥幸,接下来 ...
- 从入门到掌握 - 系统学习shell语言
简介 什么是 shell Shell是一种程序或命令行解释程序,用于解释用户直接输入的用户命令或从文件中读取的用户命令,然后将 它们传递给操作系统以进行操作或处理.要注意,这个过程是解释而不编译脚本, ...
- 系统学习javaweb3----HTML语言3(结束)
说明:昨天是北方小年,需要做的事情有点多,需要祭灶,扫尘.包饺子,吃糖瓜儿,学习时间有点少,所以今天将两天的知识综合一下发出. 自我感觉:虽然感觉大致都了解了HTML语言,但是感觉自己面对程序还是无从 ...
- 如何系统学习C 语言(中)之 指针篇
谈到指针,我们可能会想到钟表上的指针,但这里的指针不是现实生活中看得见摸得着的钟表上的指针,c 语言中的指针只存在于逻辑思维中,物理上并不存在. 同时,指针也是C 语言中最精华的部分,通过灵活地运用指 ...
随机推荐
- @Valid注解的一点理解
@Valid注解存在于spring-boot-starter-web包下,只要项目中存在该依赖就无需自行导入,也就是说该注解适用于springboot项目此注解用于表单验证,简化了判断代码用法:格式如 ...
- SSA
wikipedia上关于SSA的定义如下: In compiler design, static single assignment form (often abbreviated as SSA fo ...
- HTML(思维导图)
- 踩坑系列《三》 java -version 报错出现Error occurred during initialization of VM java/lang/NoClassDefFoundError:
之前导入一个项目,因为该项目Spring版本过低,只能适用于1.7版本,装了jdk1.7版本.安装配置好后,打开cmd窗口,执行 java -version 指令发现没像正常一样显示版本信息,而是报了 ...
- Django整理(四) - URL配置
1. URL配置 一.需求 1. 需求:在浏览器访问URL地址 http://127.0.0.1:8000/users/index 时,显示hello django信息 2. 实现 i. 需要编写一个 ...
- PHP审计之PHP反序列化漏洞
PHP审计之PHP反序列化漏洞 前言 一直不懂,PHP反序列化感觉上比Java的反序列化难上不少.但归根结底还是serialize和unserialize中的一些问题. 在此不做多的介绍. 魔术方法 ...
- 微信小程序_快速入门01
这段时间,嗯,大四课程已经结束了,工作也已经找到了,但是呢,到公司报道的时间还没到,哈哈,马上就开始人生的第一份工作了,怎么说确实有点期待~ 在这段时间一方面为第一份工作做各种准备,另一方面也没有停止 ...
- app定位工具介绍
一.元素获取工具WEditor使用 1.安装WEditor:pip3 install weditor 2.启动WEditor:python3 -m weditor Android : ...
- Centos7 python3环境搭建 兼容python2.7
Centos7 python3环境搭建 兼容python2.7 安装前提依赖 yum install openssl-devel bzip2-devel expat-devel gdbm-devel ...
- 【c++ Prime 学习笔记】第8章 IO库
C++语言不直接处理输入输出,而是通过标准库中的一组类来处理IO 1.2节介绍的IO库: istream(输入流)类型,提供输入 ostream(输出流)类型,提供输出 cin,是istream对象, ...