[讨论] 大神们都来看看,这个是什么意思#include "os_q.c"

lxgree2013   2013-1-22 17:14 楼主
/*
*********************************************************************************************************
*                                                uC/OS-II
*                                          The Real-Time Kernel
*
*                          (c) Copyright 1992-2002, Jean J. Labrosse, Weston, FL
*                                           All Rights Reserved
*
* File : uCOS_II.C
* By   : Jean J. Labrosse
*********************************************************************************************************
*/
#include "includes.h"

#define  OS_MASTER_FILE                       /* Prevent the following files from including includes.h */
#include "os_mutex.c"
#include "os_q.c"

上面这个是我从本论坛中下载的2.52的源代码,该文件名字为UCOS_ii.C,我看不懂既然是.C文件,怎么还可以嵌套C文件(蓝色那两行),这个我在以前是从没有见过的,看不懂这个是干嘛用的,有什么作用

回复评论 (6)

回复 楼主 lxgree2013 的帖子

非常感谢你,我懂了
点赞  2013-1-22 18:47
引用: 原帖由 lxgree2013 于 2013-1-22 17:14 发表
/*
*********************************************************************************************************
*                                                uC/OS-II
*                              ...
谁说不能在.c里面包含.c文件,在.h文件里面还能包含.c文件呢。这个因为C太灵活了。只是这个可能是不规范而已。另外,如果这整个的OS支持是以库的方式支持的话,它是可以用.c包含.c的,规范不规范只是阅读范畴的问题。
点赞  2013-1-22 18:56

回复 板凳 lr2131 的帖子

说到这个.h文件了,我给你看个
#include    "includes.h"
#include   
#include   
#include   
#include   
#include   

这个也是官网的范例,同样是头文件,为什么有的是用一对引号括起来,有的是用<>呢?用<>的都是编译器自带的文件,第一个是UCOS-II的文件,是不是因为这个啊,还是说这样写是个人习惯?
点赞  2013-1-22 21:45
引用: 原帖由 lxgree2013 于 2013-1-22 21:45 发表
说到这个.h文件了,我给你看个
#include    "includes.h"
#include   
#include   
#include   
#include   
#include   

这个也是官网的范例,同样是头文件,为什么有的是用一对引号括起来,有的是用 ...
这几个尖括号括起来的文件你可以试着找找在这个工程里,应该是没有的,这说明这几个文件是作为库文件来用的,同时被编译环境支持是不是,就比如说51单片机,上来先有个#include 然后可以使用很多编译环境提供的东西,其实那些有很多都是在这些库文件里面,这些库文件在编译环境的安装目录下,你可以搜一下能搜到的。如果你写成#include ”reg51.h“
也是可以的,但只是没有用尖括号的好。

尖括号是编译器直接到编译环境内部的路径下找对应的文件,找不到就报错。
双引号是先在当前目录下找,找到了就找到了就不再找了。要没找到就去编译环境内部的路径下找对应的文件,找到就行了,没找到,就报错。

所以一般要是包含编译环境支持的库文件,用尖括号好,用双引号也可以,只是效率低,毕竟要多做些无谓的工作,除非你把库文件拷贝到当前目录下(有时会引出连锁性问题,强烈建议不要这么干)。如果是自己定义的文件,那就一定得用双引号。
点赞  2013-1-23 08:52
引用: 原帖由 lxgree2013 于 2013-1-22 21:45 发表
说到这个.h文件了,我给你看个
#include    "includes.h"
#include   
#include   
#include   
#include   
#include   

这个也是官网的范例,同样是头文件,为什么有的是用一对引号括起来,有的是用 ...
开头的这个#include    "includes.h",是一种比较好的编程风格,建议你要学会这种方法。但也请注意不要先入为主,这种风格在文件工程量和复杂度小的时候是很好的,不然就会大幅降低编译效率,当然始终都不会降低程序实际的运行效率。一般单片机、简单嵌入式工程的文件都不会特别大特别复杂,所以你可以在单片机嵌入式编程的情况下大胆用这种风格。

includes.h在这里明显是移植方官方用到的文件(不一定是UCOS2官方的),但不是编译环境的库文件,所以在工程目录下可以找到这个文件,在编译环境下找不到,一定要用双引号。
这个includes.h里面存放着很多其他文件需要用的东西,所以其他的文件基本都直接或间接包含这个includes.h的话将不太需要关心文件包含的一些细节性问题,同时如果再加入一些文件,也仅仅需要小的添加和改动就可以了。以后你还会遇到#include    "public.h",其实和这个#include    "includes.h"是基本一样的。注意理解public.h和includes.h的字面意思。我写代码的风格基本也是这样,另外文件组织和编译组织分层次和模块,文件包含路径采用相对路径的方式。
点赞  2013-1-23 09:09

回复 6楼 lr2131 的帖子

你真乃神人也。。。
点赞  2013-1-23 09:21
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复