当前位置:首页 > 嵌入式 > 玩转嵌入式
[导读]很多程序员写代码,可能没有仔细研究一些细节问题,比如今天说的#include相关的内容。


很多程序员写代码,可能没有仔细研究一些细节问题,比如今天说的#include相关的内容。

01





关于#include

首先,#include为预处理语句,那么什么是预处理语句呢?


预处理语句最明显的标志是一些行首以#开始的特殊语句。


例如:#include、 #define、 #if等就是预处理语句。在程序的其它编译处理(词法分析、语法分析、代码生成、优化和连接等)之前,先进行这些语句的分析处理。 


在编译工具中,有一个叫预处理器,预处理器发现 #include 指令后,就会进行一些预处理操作。

02





#include的定义


如果你在看一些C/C++教程,那么你可能会发现,有些教程涨的#include命令写作#include <文件名>,但有时候又会出现#include "文件名"

你会很疑惑,到底哪个是对的呢?为什么要有这两种不同的写法呢?


1.#include  
系统自带的头文件用尖括号括起来,这样编译器会在系统文件目录下查找。 

2.#include "xxx.h"
用户自定义的文件用双引号括起来,编译器首先会在用户目录下查找,然后在到C++安装目录(比如VC中可以指定和修改库文件查找路径,Unix和Linux中可以通过环境变量来设定)中查找,最后在系统文件中查找。 

这两种写法都是正确的写法,但是它们却是有区别的。我们知道C/C++已经有一些编写好的头文件(比如标准函数库等),它们存放在VC++的Include文件夹里。当我们使用#include <文件名>命令时,编译器就到这个文件夹里去找对应的文件。显然,用这种写法去包含一个我们自己编写的头文件(不在那个Include文件夹里)就会出错了。所以包含C++提供的头文件时,应该使用尖括号。


相反地,#include "文件名"命令则是先在当前文件所在的目录搜索是否有符合的文件,如果没有再到Include文件夹里去找对应的文件。因此,无论这个文件是C++提供的还是自己编写的,使用#include "文件名"命令一定是正确的。这也正是书中本节之前的程序一律使用#include "文件名"命令的原因。

03





关于尖括号

C++标准中,包含C++提供的头文件并不是写作#include <文件名>,如#include 的写法是过时的。正确的写法是#include ,并且要使用std名字空间。有些程序中会有using namespace std;就是按照这种标准书写的。名字空间也称为命名空间,主要是用来避免大型程序开发中的标志符冲突。标准还规定了如何在C++中包含C的头文件,有兴趣的读者可以到网上查阅这些资料。

尽管以上两种#include命令都可以正确地被VC++识别了,但是它们却并不符合C++的标准。标准规定,包含C++提供的标准头文件或系统头文件时应使用尖括号,包含自定义头文件时可使用双引号。 


虽然有些文件是系统文件,但如果你工程中包含有相应文件,使用#include "xxx.h" 也不会报错(比如在Keil中使用#include "stdio.h"),但还是建议使用规范的代码。
可能复制粘贴习惯了,你都不知道究竟是 #include 还是 #include "xxx.h" 了。

关注微信公众号『玩转嵌入式』,后台回复“128”获取干货资料汇总,回复“256”加入技术交流群。

精彩技术文章推荐



01

|常用的校验算法介绍


02

|C语言,动态展示经典排序算法


03

|插入排序:最直观的排序算法


04

|冒泡排序,经典的排序算法


文章来源于电子工程 专辑

免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

随着现代家庭生活方式不断升级,厨房已不再只是功能空间,而逐渐成为融合审美表达、健康管理与智能体验的重要场域。消费者在关注空间整体性的同时,也对食材储存的安全性、洁净度以及使用便利性提出了更高要求。基于对中国家庭真实使用场...

关键字: 冰箱 嵌入式

在嵌入式系统、工业物联网等各类电子设备中,UART与网口是两种应用广泛的通信接口,前者作为经典的串行通信接口,承担着简单设备互联、调试日志传输等基础任务,后者则专注于高速、远距离的数据交互,是设备接入网络、实现大数据量传...

关键字: 嵌入式 通信接口 网口通讯

在软件开发领域,设计模式被誉为“解决特定问题的最佳实践”,但在嵌入式开发中,它却常常处于“边缘地带”。许多嵌入式工程师职业生涯中可能从未刻意使用过设计模式,甚至认为这些“软件工程理论”与单片机、传感器、实时系统等硬件紧密...

关键字: 嵌入式 设计模式

在居住结构持续演进与消费需求不断升级的背景下,中国家庭厨房正经历从“功能集合”向“系统空间”的深层转变。厨房不再只是烹饪的场所,而逐渐成为融合效率、健康、美学与家庭互动的重要生活空间。基于对这一趋势的长期洞察,西门子家电...

关键字: 嵌入式 蒸玲珑

在物联网设备、工业控制系统和智能家居等嵌入式场景中,轻量级WEB服务器扮演着核心角色。它们不仅需要满足资源受限环境下的性能需求,还需兼顾安全性、可扩展性和开发效率。本文从资源占用、功能特性、适用场景三个维度,对比分析六大...

关键字: 嵌入式 WEB服务器

在嵌入式软件开发工具领域,一场悄然的变革正在发生。随着全球软件行业向订阅制转型,嵌入式软件开发工具的授权模式也迎来了重要调整。市场上的嵌入式软件开发工具基本可以分为三类:商用开发工具,开源开发工具和厂商私有开发工具,其中...

关键字: 嵌入式 MCU RISC-V

在资源受限的嵌入式系统中,传统调试工具(如JTAG)往往成本高昂且占用引脚资源。本文介绍一种基于串口的低成本调试方案,通过自定义协议实现内存数据的实时监控,硬件成本可降低80%以上,特别适用于8/16位MCU开发场景。

关键字: 嵌入式 串口 内存数据

随着国家家电以旧换新补贴政策的持续推进,绿色节能、品质升级正成为越来越多家庭的新年焕新关键词。面对消费者在居住空间、生活效率与健康体验上的多元需求,西门子家电围绕新春焕新节点,正式开启“开门红”焕新季,通过国家补贴与企业...

关键字: 嵌入式 咖啡机 嵌饮机

设计人员通过瑞萨远程板场可在新MCU发布首日免费开始编程和编码

关键字: MCU 嵌入式 电路板
关闭