如何系统学习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 语言中最精华的部分,通过灵活地运用指 ...
随机推荐
- 鸿蒙内核源码分析(并发并行篇) | 听过无数遍的两个概念 | 百篇博客分析OpenHarmony源码 | v25.01
百篇博客系列篇.本篇为: v25.xx 鸿蒙内核源码分析(并发并行篇) | 听过无数遍的两个概念 | 51.c.h .o 任务管理相关篇为: v03.xx 鸿蒙内核源码分析(时钟任务篇) | 触发调度 ...
- 2021“MINIEYE杯”中国大学生算法设计超级联赛(8)(1002,1004,1006,1009)
前言 依旧是白嫖账号,只打了一些题/kk 正题 1002 Buying Snacks 题目大意 \(n\)个物品,每个可以买一次也可以不买,如果买需要选择\(1/2\)块钱的,然后也可以相邻两个一起买 ...
- 【Azure Developer】Azure Automation 自动化账号生成的时候怎么生成连接 与证书 (Connection & Certificate)
Azure Automation :The Azure Automation service provides a highly reliable and scalable workflow exec ...
- VmWare装Linux&Centos步骤
昨晚一次偶然的机会进入飞哥的直播间,他正在将用虚拟机搭建Linux环境的步骤,自己之前也确实安装过一次,不过没什么系统性总结,过程中有些步骤还需百度查找.于是乎今天决定从零基础在过一遍流程,便是这篇博 ...
- NOIP 模拟八 考试总结
T1星际旅行 给出n个点,m条边,求满足一条路径使得m-2条边经过2次,2条边经过1次的方案数.并且题目中给出有自环. 看到题面我以为是个计数DP,可能是计数题做多了吧哈哈.其实仔细朝图的方向想一想就 ...
- HTML选择器的四种使用方法
选择器<style> 为了让.html代码更加简洁,这里引入选择器style 本文总共介绍选择器的四种使用方式 一.选择器的四种形式 1.ID选择器 id表示身份,在页面元素中的id不允许 ...
- JVM堆内存泄露分析
一.背景 公司有一个中间的系统A可以对接多个后端业务系统B,一个业务系统以一个Namespace代表, Namespace中包含多个FrameChannel(用holder保存),表示A连接到业务 ...
- Linux虚拟机配置静态ip地址
使用VMware搭建的虚拟机ip地址经常变动,在这里记录一下虚拟机设置静态ip地址: 首先通过VMware菜单栏编辑->虚拟网络编辑器->NAT设置查看子网ip地址和网关ip: 例如我这里 ...
- kafka初认识(一)
首先贴出官网地址:https://kafka.apache.org/ 一. 简介 Kafka 是 linkedin 使用 Scala 编写具有高水平扩展和高吞吐量的分布式消息系统.Kafka 对消息保 ...
- Install WSL
Install WSL Prerequisites You must be running Windows 10 version 2004 and higher (Build 19041 and hi ...