|
| 出处:21ic 时间: 2007-11-06 |
|
xiezonglin 发布于 2007-9-23 21:46:00 向各位大侠请教一个问题。
我在a.c里定义了一个数组 char cUnitTab[]={...},由赋值确定数组长度, 在a.h中有下列内容 extern char cUnitTab[]; #define UNITLEN sizeof(cUnitTab) b.c包含a.h,使用UNITLEN 这个宏的时候提示返回0; 问题应该是a.h的变量声明中没有长度,但是由于cUnitTab的长度可能会因需要而变化,由赋值的内容决定,而且我希望维护这个程序时增加cUnitTab的内容时不用去考虑长度,由编译器自动给出。 请问,这个问题有什么好的解决办法吗?我试过一种方法是定义量会占用空间,并且在使用时很耗运行时间。
沈老 发布于 2007-9-24 20:24:00 #ifndef a_h // 为避免重复定义 #define a_h
#define UNITLEN sizeof(cUnitTab)
char cUnitTab[]={0,1,2,3,4,5,6};
#endif //a_h
xiezonglin 发布于 2007-9-24 21:00:00 头文件中好像不适合定义变量?
ayb_ice 发布于 2007-9-25 8:00:00 谁说的,我的项目所有全局变量都是在头文件中定义的...
xiezonglin 发布于 2007-9-30 23:10:00 别的文件包含了这个文件后就会再定义一个这个变量啊,然后就出错了,不知道您用什么方式? #ifndef a_h // 为避免重复定义 #define a_h
这个也有加啊
yuanjian79 发布于 2007-10-9 20:51:00 全局变量定义在头文件,那么,两个c文件要包含一个头文件能编译通过吗?
zusen 发布于 2007-10-9 21:29:00 在头文件里定义变量是可行,,但这个头文件不能重复包含 用extern 定义外部变量就可以
emtionmk 发布于 2007-10-13 22:33:00 头文件不要定义变量,而只能声明,
因为在头文件定义变量时,当多个.c文件引用这个头文件时,会在多个.c文件中都定义这个变量的。即cUnitTab[]这个数组都每个.c中都会分配内存空间,且占用不同的地址。可以在变量前加extern声明
emtionmk 发布于 2007-10-13 23:12:00 试了一下,可以在a.h取消宏,加一个extern const int array_len; 然后在a.c中用 array_len = sizeof(cUnitTab)就行了
a.h 文件: extern char cUnitTab[]; extern const int array_len;
a.c文件: char cUnitTab[]={.......}; array_len = sizeof(cUnitTab);
在b.c中调用array_len就相当于你那个UNITLEN 宏定义了
thw 发布于 2007-10-14 22:31:00 SIZEOF不是函数,是一个运算符,编译器在预编译阶段已经对SIZEOF的值进行了替换,如果你这样定义编译器是不知道该值是多少的。另外不定长的数组我印象中是不能定义为全局变量的,编译器应该会告警。
建议在你填入的内容后加入结束字符,比较容易算出数据的长度。
wishcom 发布于 2007-10-15 22:45:00 对于在头文件中定义变量,没有什么地方说不允许,但我还是要说: 如果你在头文件中定义变量,那么只能说明你没有大型项目的经验。。。。
eraychen 发布于 2007-11-6 19:58:00 比如在a.h文件这样定义
#ifndef _A_H_ #define _A_H_
#ifdef _A_C_ #define EXTERN #else #define EXTERN extern #endif 定义变量: EXTERN BYTE bParam;
#undef EXTERN #endif ////////////////////////////// 在a.c文件里这样定义 #ifndef _A_C_ #define _A_C_
#include"a.h" //////////////////////////////////
那么在a.c文件调用bParam就是变量了,而在其他包含a.h文件的文件里bParam就是外部变量了
这样的话,我觉得不管你的系统多大,都是没问题的,不知道为什么不可以???
|
| 【关闭】 【打印】 |
|
|
|
|