KEILC 创建工程 文件包含规范

[复制链接]
4239|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"
程序匠人 发表于 2009-8-6 23:38 | 显示全部楼层
再次提醒,看懂这个是关键:

//--------------------------------------------------------
//避免重复定义
//--------------------------------------------------------
#ifdef  root
  #define EXT_  
#else
  #define EXT_  extern
#endif
 楼主| dudongdao 发表于 2009-8-6 23:56 | 显示全部楼层
哦~~ 了解了~~~   哈哈~~  高招啊~~~
再请教个问题函数声明呢~~  可以放一起吗~~  我想把所有的函数声明都放一起,让后给所有的C调用,可以吗~~
程序匠人 发表于 2009-8-7 00:07 | 显示全部楼层
函数声明 ,还是分开放在各自头文件,然后用 "common.h"统一去加载。反正这个不怕重复。
 楼主| dudongdao 发表于 2009-8-7 00:19 | 显示全部楼层
好,我试试~~
 楼主| dudongdao 发表于 2009-8-7 07:33 | 显示全部楼层
宏定义怎么办,再一个头文件中定义了,在另一个C文件中要用~~
fabest 发表于 2009-8-7 08:01 | 显示全部楼层
宏不会怕重复定义的,你可以将宏放到COM.H文件中,然后所有的C文件都包含COM.H

匠人的这种用法真好,学习了
mohanwei 发表于 2009-8-7 08:53 | 显示全部楼层
这样做表面上省下了一些敲键盘时间……
带来的恶果就是代码层次、关系变得不清晰,而且任何头文件改动任何一点,整个工程所有文件都要重新编译一遍,不适合模块开发、调试。
以后移植的时候更是麻烦不断……
 楼主| dudongdao 发表于 2009-8-7 09:17 | 显示全部楼层
我现在先这样用,觉得还可以~~  
11楼的大侠深有感触啊,是不是做大程序的时候会这样,以你的经验应该如何做呢~~
mohanwei 发表于 2009-8-7 11:28 | 显示全部楼层
划分模块。
单独一个模块一般只有几个文件,这几个文件怎么折腾都没关系,甚至可以用全局变量来使模块结构、关系更清晰,跑得更快。
模块的接口在一个单独的头文件里,只声明xx_init();xx_read;xx_write();……等必要的接口。别的模块仅包含此头文件。
以上是对于规模较大的工程而言。规模小的,例如64K以下的程序,怎么折腾都没关系,大可放心用“common.h”的方法……
a305566 发表于 2011-10-15 16:56 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

90

主题

413

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部