KEIL工程中头文件包含的一些小记】的更多相关文章

@2018-4-25 11:02:27 > 源文件包含自身头文件无须指出其路径…
由于代码较多时,为了代码的工整以及易读性,往往将代码拆分成模块,并书写头文件.但keil中定义全局变量往往是一件头疼的事情. (1)xx.h文件中基本书写的是管脚定义和函数声明,全局变量不能定义在头文件中,必须最声明在模块化的xx.c文件中,并最好初始化. (2)要想在B.c文件中调用A.c中的全局变量时,只需用extern再次声明下就好了.  extern原理:通常所说的编译(build)其实分两个部分  编译(compile)和链接(link)编译的单位是文件,即单个的C文件,因此即使一个变…
@2019-01-24 [小记] 在学习 rt-thread BSP制作过程中,发现文件<stm32f1xx_hal.h>中 Env工具生成的原始顺序 1. #include "stm32f1xx_hal_conf.h" 2. #include <rtthread.h> 这将导致 <stm32f1xx_hal_spi.h> 文件找不到而编译出错,调整顺序后则OK,原因暂不详…
在一些大的工程中,可能会包含几十个基础类,免不了之间会互相引用(不满足继承关系,而是组合关系).也就是需要互相声明.好了,这时候会带来一些混乱.如果处理得不好,会搞得一团糟,根据我的经验,简单谈谈自已的处理办法: 编码时,我们一般会尽量避免include头文件,而是采用声明 class XXX.但有时候还是必须用Include头文件,那么,两者的划分在于什么呢? 应该是很明确的,但书上好像都少有提及. 首先: 我们要明白为什么要用声明取代头文件包含:对了,是为了避免无必要的重编译(在头文件发生变…
一.类嵌套的疑问 C++头文件重复包含实在是一个令人头痛的问题,前一段时间在做一个简单的数据结构演示程序的时候,不只一次的遇到这种问题.假设我们有两个类A和B,分别定义在各自的有文件A.h和B.h中,但是在A中要用到B,B中也要用到A,但是这样的写法当然是错误的: class B; class A { public: B b; }; class B { public: A a; }; 因为在A对象中要开辟一块属于B的空间,而B中又有A的空间,是一个逻辑错误,无法实现的.在这里我们只需要把其中的一…
转自:http://blog.csdn.net/hazir/article/details/38600419 今天下午遇到一个头文件相互包含而导致的编译问题,花了我不少时间去调试没找到问题,最后晚上跟师兄讨论不少时间,突然有所顿悟! 问题重现 我把问题脱离于项目简单描述一下:我写了一个函数 bool func(ClassA* CA) 需要加到项目中,我就把这个函数的声明放到 head1.h 中,函数参数类型 ClassA 定义在另一个头文件 head2.h 中,因此我需要在 head1.h 中包…
http://blog.csdn.net/jiajia4336/article/details/8996254 前向声明概念(forward declaration) 在程序中引入了类类型的B.在声明之后,定义之前,类B是一个不完全类型(incompete type),即已知B是一个类型,但不知道包含哪些成员.不完全类型只能以有限方式使用,不能定义该类型的对象,不完全类型只能用于定义指向该类型的指针及引用,或者用于声明(而不是定义)使用该类型作为形参类型或返回类型的函数. 前向声明应用场景 当你…
用C++编写比较大型的项目时,文件的分割管理确实确实是非常必要的 .下面就非常简洁明了地谈谈头文件(.h)和源文件(.cc)应该怎么写. 头文件(.h):写类的声明(包括类里面的成员和方法的声明).函数原型.#define常数等,但一般来说不写出具体的实现. 在写头文件时需要注意,在开头和结尾处必须按照如下样式加上预编译语句(如下): #ifndef CIRCLE_H #define CIRCLE_H //你的代码写在这里 #endif 这样做是为了防止重复编译,不这样做就有可能出错.至于CIR…
摘于:http://bbs.csdn.net/topics/120024677 (1)在makefile的依赖关系中用不用体现.h头文件?(2)如果在依赖关系中要体现.h头文件,应该体现到什么层次?==============================(1)在makefile的依赖关系中用不用体现.h头文件?============================== 下面是我的一些认识: 头文件中定义的是接口(函数接口,文件外全局变量和宏定义),它的作用是向调用文件封装函数的实现过程.在…
error C2504:头文件包含不全 今天碰到了很烦的问题,继承一个类之后,感觉头文件都包含了,可还是出现父类未定义的问题,最后发现,子类的子类在实现时,需要在cpp文件中包含所有他的父类的定义.因为每个cpp文件是单独编译的,需要知道其所有父类来确定这个类的大小和实现的细节. 实例代码如下: //a.hclass A{ public: ; }; //b.h class B : public A { public: virtual void fun(); }; //b.cpp #include…
英文原文地址 在开发大型的软件项目时,头文件需要得到恰当的管理,甚至在c中也会面临这种问题,当我们用c++开发时,头文件的管理会变得更复杂,更加耗费我们的时间去管理,下面我将讲一些包含规则来简化这个苦差事. 头文件包含规则 当在在当前正在编写的文件中没有预先相应的声明时我们需要include我们需要的头文件,否则我们需要声明. 头文件应该设计的与include的顺序无关. 例如在写x.cpp时尽量确保x.h是x.cpp需要的第一个header file. header file的包含机制允许包含…
将要添加的文件夹拷贝到工程的目标文件夹中. 打开工程,在Solution Explorer中选中“Show All Files”按钮. 然后VS会显示文件夹中包含,但是不在工程中的文件夹. 右键该文件夹,选择“Include In Project".…
全局级别的引入 为VS所有项目设置包含目录和库目录,对所有项目都有效 如下图所示:工具-选项-项目和解决方案-VC++目录-包含文件:在此添加头文件目录即可 工具-选项-项目和解决方案-VC++目录-库文件:在此添加lib库文件目录即可 项目级别的引入 为单个项目设置包含目录和库目录,只对设置的项目有效 头文件包含目录: 项目上右键-属性-C/C++常规-附加包含目录 Lib库文件目录: 项目上右键-属性-连接器-常规-附加库目录 comment(lib,”test.lib”) comment包…
Eclipse 中 Android.mk文件c++头文件包含问题 jni中的目录结构如下: 编译找不到头文件 LOCAL_PATH := $(call my-dir)LOCAL_C_INCLUDES := $(LOCAL_PATH) LOCAL_C_INCLUDES += ncnn_android_build/include 可以找到头文件 LOCAL_PATH := $(call my-dir)LOCAL_C_INCLUDES := $(LOCAL_PATH) LOCAL_C_INCLUDES…
在较新版的Visual Studio中,新生成的C++项目文件的的头文件夹下会默认有头文件stdafx.h,而源文件夹下则默认有源文件stdafx.cpp,手动将这些文件删除后,编译时系统还会报错.下面记录笔者了解到的关于头文件stdafx.h的信息. 使用预编译头 stdafx.h并不是标准C++头文件,也就是说,该文件本质上相当于自定义的一个头文件( 这里是VS默认自定义的文件),与项目的源代码文件存放在同一个文件文件夹下,通过#include"stdafx.h"引用: 从内容上来…
当出现访问类的函数或者需要确定类大小的时候,才需要用头文件(使用其类定义)    http://blog.csdn.net/clever101/article/details/4751717 看到这个警告,我想你一定悟到了什么.下面我说说我的结论:类的前置声明和包含头文件的区别在于类的前置声明是告诉编译器有这种类型,但是它没有告诉编译器这种类型的大小.成员函数和数据成员,而包含头文件则是完全告诉了编译器这种类型到底是怎样的(包括大小和成员).这下我们也明白了为何前置声明只能使用指针来进行,因为指…
.h头文件和.cpp文件的区别 疑惑1:.h文件能够编写main函数吗? 实验: 编写test.h文件,里面包含main函数 若直接编译g++ test.h -o test,通过file命令 file test,得到如下结果test: GCC precompiled header (version ) for C++ ———test文件是预编译头文件 推测:.h文件不能单独生成.o文件 疑惑2:.h文件中声明和定义的变量和函数是如何与.cpp文件结合的? 实验: 编写test.h文件,里面包含一…
  c语言头文件怎么写?我一直有这样的疑问,但是也一直没去问问到底咋回事:所以今天一定要把它弄明白! 其实学会写头文件之后可以为我们省去不少事情,可以避免书写大量的重复代码.有利于整理思路.使代码脉络更加清晰... 总之,好处多多学起来还不难就对了,还在等什么快来看看吧!   首先,我们要建一个头文件,命名为abc.h   然后就是内容了,其大致格式如下: #ifndef __ABC_H__ //ifndef 实际上就是“if not define”  如果没有定义  #define __ABC…
一.C++ 编译模式 通常,在一个 C++ 程序中,只包含两类文件―― .cpp 文件和 .h 文件.其中,.cpp 文件被称作 C++ 源文件,里面放的都是 C++ 的源代码:而 .h 文件则被称作 C++ 头文件,里面放的也是 C++ 的源代码. C++ 语言支持"分别编译"(separatecompilation).也就是说,一个程序所有的内容,可以分成不同的部分分别放在不同的 .cpp 文件里..cpp 文件里的东西都是相对独立的,在编译(compile)时不需要与其他文件互通…
2013-04-14 17:03 (分类:计算机程序) 烦死了,这种垃圾小问题很多,你又必须要知道.......在编写c++程序时,会编写多个类或者多个cpp文件,免不了要多次使用include包含头文件,于是重复包含的问题就来了,怎样避免这一情况呢? 在此我们使用条件编译来解决这个问题 #ifndef x //先测试x是否被宏定义过#define x程序段1     //如果x没有被宏定义过,定义x,并编译程序段1 #endif程序段2     //如果x已经定义过了则编译程序段2的语句,“忽…
php中的文件包含 include,require,include_once,require_once 文件包含:是指将一个文件的内容包含进另外一个文件,有利于代码的复用等.php中文件包含指令有4个,分别为:include,include_once,require,require_once其中:include和require:使用一次便包含一次文件;而include_once和require_once则是:不管在一个脚本中包含另外一个脚本多少次,都只加载一次,不会重复,这样可以避免因一个文件的…
1.包含目录:include 头文件包含目录设置: project->setting->C/C++->常规: Additional include directories(附加包含目录): ../../include等等 2.工作目录:应用应用程序工作目录.默认为包含项目文件目录. project->配置属性->调试 3.输出目录:项目调试时链接该项目的*exe或*dll的路径.例如D:\bin\debug.          project->配置属性->常规…
我们在编敲代码中头文件是常常使用的. 可是头文件是应该包括在.H文件里还是在.cpp文件里.在这个其中有什么样去差别呢. 假如说我们编写了一个a.cpp  .我们将a.cpp文件的变量和函数申明在a.h中. 在a.h文件有使用了b.中定义的类型type1数据m_type,相同b.cpp的头文件一些变量也声明在b.h中. 此时我们当然能够在a.cpp中包括b.h 也能够在a.h中.这样都是可行的.由于我们编译的时候会会将b.h包括进来. 而.h文件是不參与编译的.然后我们继续深入. 假如我们将b.…
以前写单片机程序时总是把所用函数和变量都写在一个c文件里,后来遇到大点的项目,程序动则几千行,这种方式无疑会带来N多麻烦,相信大家都有所体验吧! 后来学会了在keil里进行模块化编程,即只把功能相同或相近的函数写在同一个c文件,这样以来一个项目往往由很多个c文件组成,但又带来一个问题即是某些c文件之间需要相互通信,一般我们都采用了全局变量,对吧.很多同学虽然知道在其它c文件里引用全局变量要用extern进行声明,但对此操作时往往思路不清,迷迷糊糊,经常遇到一堆错误提示,然后一个一个排除,既费时又…
背景 之前都是用的MFC已搭好框架,今天想自己从零开始完成添加文件,编译,并解决文件包含问题,在此做个记录. 正文 首先创建一个Win32控制台应用程序,不要直接点击完成,而是点击下一步,然后选择空项目. 在右侧出现头文件,源文件,资源文件,这些看起来是文件夹的东西被称为筛选器,如若想要在对应的文件夹(筛选器)内添加新的文件夹(筛选器),在对应的文件夹(筛选器)右击-->添加-->新建筛选器,如此即可. 添加文件,可以添加类,如若想添加c文件也可,添加-->新建项,则是自己写/现有项,则…
一.关于全局变量的定义.声明.引用: (只要是在.h文件中定义的变量,然后在main.c中包含该.h文件,那么定义的变量就可以在main函数中作为全局变量使用) 方法1: 在某个c文件里定义全局变量后,在其它c文件要用,则在要用c文件里用extern进行声明.说来轻巧但还是很多同学会出问题.请看下面注意事项方可解决! 注: (1)在定义全局变量时可同时将其初始化 (2)在用extern声明时不能再初始化,否则编译器报错 举例:有两个c文件分别为one.c和two.c,two中要用到one中的全局…
在使用C++进行程序开发的时候,有个常识我们很熟悉,就是把类的定义写在.h文件中,把类的具体实现写在.cpp文件中.这毫无疑问是对的.但我们很少去思考为什么要这样做,本文结合自己的学习体会,对头文件及const对象的定义进行一些说明. 1.为什么要使用头文件 使用头文件就是为了在希望使用一些共同函数或数据的时候,只需包含这个文件就能实现,无需多次重复编写相同的代码,提高了效率. 2.什么东西可以写在头文件中 在头文件中,我们的编程经验是,函数的声明,类的定义等等应该写在头文件里面.但具体哪些可以…
在xxx.h头文件的代码中夹杂的“<h>      </h>”.“<o>”“<i>”.“<c1>   </c>”和“<e>    </e>”这些符号是MDK自带的配置向导控制符号,用这些符号控制的代码可以生成一个对应的图形界面的配置向导,有关配置向导的语法,可在MDK的帮助文档里面找到,在搜索栏输入Configuration  Wizard 即可搜索到.…
最近看了百度手环开源项目,发现所有的算法都被封装成了一个lib文件在keil中调用 也是第一次学习到. 问题引出:为什么要做成lib库? 1.有些方案公司为了将自己写的关键部分源代码不进行公开,但是同时库文件又需要让别人能够正常调用,那封装成lib的格式就是一个好方法. 2.编译某些工程文件时非常耗时,像UCGUI和ST官方的库时,由于文件众多,编译一次可能得1两分钟,这时可以打包成库,这时编译工程时就不会再次编译库的文件,节省不少的时间. 唯一一点不好的是:不能用右键go to Definit…
务必提前预读这里的内容:http://www.cnblogs.com/stemon/p/3999844.html 回到cpp文件与头文件各写什么内容的话题上: 理论上来说cpp文件与头文件里的内容,只要是C语言所支持的,无论写什么都可以的,比如你在头文件中写函数体实现,任何一个cpp文件包含此头文件就可以将这个函数编译成目标文件的一部分(编译是以cpp文件为单位的,如果不在任何cpp文件中包含此头文件的话,这段代码就形同虚设),你可以在cpp文件中进行函数声明.变量声明.结构体声明,这也不成问题…