打印

KEILC 创建工程 文件包含规范

[复制链接]
2951|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dudongdao|  楼主 | 2009-8-6 22:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一般创建一个工程后,一个C文件对应一个H文件,在本C文件1中用到C文件2的函数或者变量那么就要加EXTERN声明~~  一般是放到C文件对应的H文件中。
我怎么觉得这样好麻烦,比如我有C1,C2,C3.....CN个文件,对应H1,H2,H3....HN个头文件,那么我在C1中用到C2的变量和函数,要EXTERN一下,C3中用到C2的变量函数也要EXTERN一下,是这样吗,有没有简介的方法呢,把所有的变量和所有的函数放到一个头文件,所有的C文件都包含它,我试过这样总提示重复定义什么的,大家有好办法吗?

相关帖子

沙发
程序匠人| | 2009-8-6 23:05 | 只看该作者
我就喜欢放在一个文件中,关键技巧,就是下面红色部分


。。。。。。。。。
//--------------------------------------------------------
//避免重复定义
//--------------------------------------------------------
#ifdef  root
  #define EXT_  
#else
  #define EXT_  extern
#endif

//--------------------------------------------------------
//定义变量、常量
//--------------------------------------------------------
EXT_ vu16 AD_Value[ADC_Channel_n*ADC_Average_n];     //ADC采样值存放数组(队列) [0]=X轴采样值,[1]=Y轴采样值,[2]=温度采样值,[3]=参考电压采样值
EXT_ u16 X_AVR;           //X轴加速度采样滤波值
EXT_ u16 Y_AVR;           //Y轴加速度采样滤波值
EXT_ u16 TEMP_AVR;         //内部温度传感器采样滤波值
EXT_ u16 VREF_AVR;         //内部参考电压采样滤波值
EXT_ u8 Temp_Value;          //温度值(范围:0~99,单位:℃)
。。。。。。。。。。。。。。

使用特权

评论回复
板凳
dudongdao|  楼主 | 2009-8-6 23:27 | 只看该作者
没搞太明白,那所有的C文件都能包含这个头文件吗?

使用特权

评论回复
地板
程序匠人| | 2009-8-6 23:37 | 只看该作者
对每个c文件都包含这个头文件,不过,只有main.c文件在包含之前要加一句“#define root”


//--------------------------------------------------------
//插入文件包
//--------------------------------------------------------
#define root                    //只有main.c文件在包含之前要加这句
#include  "common.h"

使用特权

评论回复
5
程序匠人| | 2009-8-6 23:38 | 只看该作者
再次提醒,看懂这个是关键:

//--------------------------------------------------------
//避免重复定义
//--------------------------------------------------------
#ifdef  root
  #define EXT_  
#else
  #define EXT_  extern
#endif

使用特权

评论回复
6
dudongdao|  楼主 | 2009-8-6 23:56 | 只看该作者
哦~~ 了解了~~~   哈哈~~  高招啊~~~
再请教个问题函数声明呢~~  可以放一起吗~~  我想把所有的函数声明都放一起,让后给所有的C调用,可以吗~~

使用特权

评论回复
7
程序匠人| | 2009-8-7 00:07 | 只看该作者
函数声明 ,还是分开放在各自头文件,然后用 "common.h"统一去加载。反正这个不怕重复。

使用特权

评论回复
8
dudongdao|  楼主 | 2009-8-7 00:19 | 只看该作者
好,我试试~~

使用特权

评论回复
9
dudongdao|  楼主 | 2009-8-7 07:33 | 只看该作者
宏定义怎么办,再一个头文件中定义了,在另一个C文件中要用~~

使用特权

评论回复
10
fabest| | 2009-8-7 08:01 | 只看该作者
宏不会怕重复定义的,你可以将宏放到COM.H文件中,然后所有的C文件都包含COM.H

匠人的这种用法真好,学习了

使用特权

评论回复
11
mohanwei| | 2009-8-7 08:53 | 只看该作者
这样做表面上省下了一些敲键盘时间……
带来的恶果就是代码层次、关系变得不清晰,而且任何头文件改动任何一点,整个工程所有文件都要重新编译一遍,不适合模块开发、调试。
以后移植的时候更是麻烦不断……

使用特权

评论回复
12
dudongdao|  楼主 | 2009-8-7 09:17 | 只看该作者
我现在先这样用,觉得还可以~~  
11楼的大侠深有感触啊,是不是做大程序的时候会这样,以你的经验应该如何做呢~~

使用特权

评论回复
13
mohanwei| | 2009-8-7 11:28 | 只看该作者
划分模块。
单独一个模块一般只有几个文件,这几个文件怎么折腾都没关系,甚至可以用全局变量来使模块结构、关系更清晰,跑得更快。
模块的接口在一个单独的头文件里,只声明xx_init();xx_read;xx_write();……等必要的接口。别的模块仅包含此头文件。
以上是对于规模较大的工程而言。规模小的,例如64K以下的程序,怎么折腾都没关系,大可放心用“common.h”的方法……

使用特权

评论回复
14
a305566| | 2011-10-15 16:56 | 只看该作者
mark

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

90

主题

413

帖子

1

粉丝