关于头文件

C++特性的臃肿:C++是一门包含大量高级特性的巨型语言。越高级,越有用,但是越难用,越容易出错,世上好多事情都说这样的。
所以不如我们先看看它是怎么处理的,很多事情,尤其是编程,我们一定要踩在别人铺就的路上才能前进,即使你是在发明一种新的语言。

保持统一编程风格意味着可以轻松根据“模式匹配”规则推断各种符号的含义。创建通用的、必需的习惯用语和模式可以使代码更加容易理解。

 


这点是显而易见的,和一个懂电脑的人讨论电脑的话题和与一个不懂电脑的人讨论用的词语一定是不一样的。如果对方理解你用的词语,甚至你们用的都是一样的词语,也就是专业术语,沟通就变得很简单了。
编程风格就是这个意思,至于将编程风格更加的框架化和统一化,就是设计模式专门讲得东西了。那二十几条都是成千上万次的摸爬滚打后编程人员总结出来的“编程风格”。

重申一遍,它只是一种编程风格,你不用它不会死人的,所以我看它的时候就只是想想,它到底有没有用,有用我就用,没用就拉倒。

 

头文件

 

当你刚开始编程的时候,你每次都是先include一个头文件iostream,它是和输入输出相关的,但是你并不知道它到底包含些什么,你也不想知道,只不过将它引过来而已。因为你急着要写下面的代码了。

但是当你编程编到一定程度后,你的老师很自然的就要求你将很多的头文件引用,函数声明放到一个头文件里,这时候你就不得不去理会这个头文件了。

 

接下来你将要遇到的问题就是作者提到的:
头文件里的东西是要被编译的,但是如果几个头文件之间互相包含,那么你调用几个头文件之后就会导致很多相同的内容被多次编译……
如果你用了一个很大的头文件的一个小函数,但是这个头文件的另一个小函数被修改了,那么你的代码就需要重新编译……

他们是这么做的:


对于第一个问题:所有头文件都应该使用#define防止头文件被多重包含,命名格式当是:<PROJECT>_<PATH>_<FILE>_H_
例如项目foo中的头文件foo/src/bar/baz.h按如下方式保护:
#ifndef FOO_BAR_BAZ_H_
#define FOO_BAR_BAZ_H_
...
#endif
就是说如果这个头文件没有被包含,那么就包含它。这个被称作卫哨或者头文件卫士或者什么,可能英文用的是guard,无所谓。

对于第二个问题:
宁可尽量少包含头文件,尤其是多重包含的情况。否则牵一发而动全身。

包含文件时提出了一个顺序,好象是有些道理的:
次序如下:C库、C++库、其他库的.h、项目内的.h,并且按照首字母排序。
文件的次序除了美观之外,最重要的是可以减少隐藏依赖,使每个头文件在“最需要编译的地方编译


头文件中还可以包含一种很特别的函数,内联函数。内联函数就是编译时会将函数体展开到调用处的函数,一般函数在被调用时总是要用到栈来保存参数和当前地址的,这要占用时间和内存。内联就是把代码都放到一起,顺序执行。但是又不像将代码都放在一起那么“难看”……

但是关于内联要记住:
当函数体比较小的时候,内联该函数可以令目标代码更加高效。至于函数要小到什么程度,3行,5行,10行,差不多就行。
当函数很大时,代码很多,或者是有循环,switch或者是递归,都不要用内联。很大的函数声明为内联,反而会增加代码量,弄巧成拙。
析构函数不要声明为内联,它们一般比你看到的代码要大得多。
虚函数和递归函数即使被声明为内联的也不一定就是内联函数。


定义函数时,参数顺序为:输入参数在前,输出参数在后
这一点实在是提不出什么理论依据,况且有的值是要被修改的,这说明它既是输入又是输出。但是我觉得却是这样规范是不错的,注意它至少它有助于你养成一定的编程风格。如果输入的值不被修改,那么前半部分的参数都声明为const &,后半部分都声明为 &或者指针,不是很一目了然?

### 回答1: 如果您在编译STM32代码时遇到了头文件路径未添加的错误,可以按照以下步骤解决: 1. 确认您的头文件是否位于正确的路径下,例如在您的项目文件夹中的"inc"文件夹内。 2. 在您的工程设置中,确保您已经添加了正确的头文件路径。这通常可以在IDE的“工程设置”或“项目属性”菜单中找到。如果您使用的是CubeMX,则可以在“Project Manager”中找到“Code Generator”选项卡,然后在“Advanced Settings”中添加您的头文件路径。 3. 如果您已经添加了正确的路径,但仍然遇到了该错误,请确保您的头文件名称拼写正确,大小写也正确。 4. 最后,您可以尝试在代码中直接使用相对路径来包含头文件。例如,如果您的头文件在“inc”文件夹中,您可以使用“#include "../inc/header.h"”来包含它。 如果您的问题仍然无法解决,请参考您的IDE或编译器的文档,或向相关论坛或社区寻求帮助。 ### 回答2: 在使用STM32开发板进行编程时,经常会遇到头文件路径未添加的错误问题,导致编译无法找到相应的头文件。这种错误通常出现在使用了自定义的头文件时。 当我们在工程中包含其他文件或库时,需要在代码中添加相应的头文件路径,以便编译器能够正确地找到这些文件。 解决这个问题的方法有以下几种: 1. 修改头文件路径:在使用IDE开发环境时,可以通过打开项目属性或构建设置等设置界面,将头文件路径添加到项目的搜索路径中。这样,编译器就可以在这些路径中查找需要的头文件。 2. 使用相对路径:如果头文件与代码文件在同一目录下,可以使用相对路径来引用头文件。例如,如果需要引用一个名为"header.h"的头文件,可以在代码中使用"include "header.h""来包含该头文件。 3. 使用绝对路径:如果头文件不在当前工程所在目录下,可以使用绝对路径来引用头文件。在代码中使用完整路径名,例如"include "C:/path/to/header.h""。 4. 检查头文件是否存在:如果以上方法仍无法解决问题,需要检查头文件是否存在于指定的路径中。可能是由于文件名错误或路径错误导致编译器无法找到头文件。 在解决这类问题时,我们需要仔细查看错误信息,了解具体的错误原因。通常,编译器会指出缺少的头文件名称和具体路径。根据这些信息,可以逐步排查问题并采取相应的解决措施。 需要注意的是,正确引用头文件路径是编写良好代码的重要一环。正确添加头文件路径可以确保编译器能够正确找到所需的头文件,从而顺利完成编译和构建过程。 ### 回答3: 在STM32开发中,如果在编译时出现"cannot open source input file"的错误提示,通常是由于头文件路径没有添加正确导致的。 在编译C/C++程序时,编译器需要找到程序中所引用的头文件头文件路径告诉编译器在哪里找到这些头文件。 要解决这个问题,我们需要在编译器的设置中添加正确的头文件路径。 首先,打开项目的工程文件,找到编译器的设置选项。这些设置通常包含在一个makefile或者一个配置文件中。 接下来,找到编译器设置中的头文件搜索路径(Include Directories)选项。这个选项通常以"-I"开头,后面跟着头文件所在的路径。 确保这个路径是正确的,包含了所有需要的头文件路径。如果头文件位于项目文件夹内的子文件夹中,可以使用相对路径来指定。 另外,还可以使用绝对路径来指定头文件路径,这样可以确保编译器一定能够找到这些头文件。 完成以上设置后,重新编译项目,这个错误应该就会消失了。 总结而言,解决STM32关于头文件路径没有添加错误问题,需要在项目的编译器设置中添加正确的头文件搜索路径。确保路径正确、包含所有需要的头文件路径,重新编译即可解决问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值