发新帖我要提问
12
返回列表
打印

理不清.c和.h的关系

[复制链接]
楼主: Imakey
手机看帖
扫描二维码
随时随地手机跟帖
21
Regsen| | 2013-7-31 16:19 | 只看该作者 回帖奖励 |倒序浏览
11楼说的清楚易懂,非常恰当了

使用特权

评论回复
22
minDragon| | 2013-7-31 16:26 | 只看该作者
chenbb8 发表于 2013-7-31 15:30
自然是想inline函数到很多源文件中才会想到写进头文件中的这种方法的。
宏函数也是类似。 ...

模块化编程~是为了方便使用以及方便阅读吧~代码放H文件对应的C文件里面不是才能达到这个目的吗?

使用特权

评论回复
23
Imakey|  楼主 | 2013-7-31 16:59 | 只看该作者
yewuyi 发表于 2013-7-31 10:53
1、对于C编译器来说,符号声明、变量定义/声明、函数定义/声明等等,不管是在C文件还是H文件中都能正确的被 ...

这个感觉听起来说到点子上了,谢谢啦

使用特权

评论回复
24
Imakey|  楼主 | 2013-7-31 17:01 | 只看该作者
minDragon 发表于 2013-7-31 12:52
11楼正解~在头文件中放的是函数以及变量的声明,而在XXX.C中写代码~
要是在MAIN,C中要使用到的头文件里面 ...

没办法,用的是51的单片机,data区有限,写TFT字库的时候就得放到code 里面

使用特权

评论回复
25
Imakey|  楼主 | 2013-7-31 17:02 | 只看该作者
南宫云明 发表于 2013-7-31 08:14
是不是有些地方需要extern来声明呀

感觉上编译器对变量和函数的声明和定义的处理不太一样,函数可以用的声明定义方式,用到变量那边就不行了

使用特权

评论回复
26
yewuyi| | 2013-7-31 17:52 | 只看该作者
Imakey 发表于 2013-7-31 17:02
感觉上编译器对变量和函数的声明和定义的处理不太一样,函数可以用的声明定义方式,用到变量那边就不行了 ...

没什么不一样。

使用特权

评论回复
27
chenbb8| | 2013-7-31 18:35 | 只看该作者
minDragon 发表于 2013-7-31 16:26
模块化编程~是为了方便使用以及方便阅读吧~代码放H文件对应的C文件里面不是才能达到这个目的吗? ...

当你死认着一个规矩的时候,这叫保守或者说是固执。
比如你用宏做了一个生成队列的模板,只要往里面填队列名,队列类型,长度,就能生成一个队列的数据结构。
那么你是在每个用到这个宏的C文件中,都重新定义一个宏还是把他放到一个头文件中调用?
inline也类似,因为inline型的函数只会在所在的.o文件中被内嵌,别的文件中使用到的话就是普通的函数,所以有些人会主张把它放到H文件中。
规矩是可以打破的,只要你能知道后果,并把握这个度就行了。

使用特权

评论回复
28
minDragon| | 2013-7-31 19:03 | 只看该作者
chenbb8 发表于 2013-7-31 18:35
当你死认着一个规矩的时候,这叫保守或者说是固执。
比如你用宏做了一个生成队列的模板,只要往里面填队 ...

前辈前面所说的我了解~不过后面就不是很懂了~我基础原因~
:loveliness:讨论一下还是可以学习到点东西的~我去找找你后面所说的是什么意思先~

使用特权

评论回复
29
chenbb8| | 2013-7-31 19:42 | 只看该作者
minDragon 发表于 2013-7-31 19:03
前辈前面所说的我了解~不过后面就不是很懂了~我基础原因~
讨论一下还是可以学习到点东西的~ ...

其实我也没在头文件中放置过inline函数。
只是看到别人有提到这样用的,所以我也不清楚头文件的中防止重复编译的编译开关,会不会影响到inline函数的内嵌,我同样也是一知半解而已,哈哈:loveliness:

使用特权

评论回复
30
john_lee| | 2013-7-31 20:10 | 只看该作者
我N年前写程序,h文件和c(pp)文件的行数的比例可能不超过 10%,但现在,这个比例已经很高了,有时可以超过 1000%

使用特权

评论回复
31
tong1991海深| | 2013-7-31 21:29 | 只看该作者
南宫云明 发表于 2013-7-31 08:14
是不是有些地方需要extern来声明呀

同意

使用特权

评论回复
32
tong1991海深| | 2013-7-31 21:30 | 只看该作者
包含了 a.h 文件 就不需要再去定义变量了 ,可以声明为 extern

使用特权

评论回复
33
sysdriver| | 2013-7-31 22:24 | 只看该作者
extern  可以一个模块中的小部件声明引用,但是最好不要用于模块间的引用声明。

.h文件只放供外部引用的API借口函数声明。

使用特权

评论回复
34
amwrdfe| | 2013-7-31 23:39 | 只看该作者
赞同18L,
头文件只是一个描述和接口, 建议用功能和模块来区分

使用特权

评论回复
35
ergabd| | 2013-8-1 09:19 | 只看该作者
个人理解为 .c文件.h文件有点象父子关系 : 我编程时用keil4喜欢一个.c文件加若干个.h文件 .h文件放不同模块的子函数 .c文件里面是整个函数的框架在这里可以直接调用.h里面的子函数 可能这种理解不规范但个人感觉比较方便
.c和.c有点象兄弟关系 :一个.c文件调用另一个.c文件中的函数时 都需要先声明 所以不太喜欢添加多个.c文件

使用特权

评论回复
36
fengjiex| | 2013-8-1 13:10 | 只看该作者
这类问题我也碰到过,比较头疼,而且我在两个文件里声明的变量分别是“TEMP”和“Temp”,但是系统编译后报错:变量名冲突。

使用特权

评论回复
37
Imakey|  楼主 | 2013-8-2 09:55 | 只看该作者
fengjiex 发表于 2013-8-1 13:10
这类问题我也碰到过,比较头疼,而且我在两个文件里声明的变量分别是“TEMP”和“Temp”,但是系统编译后报 ...

后来你找到处理方法没??

使用特权

评论回复
38
fengjiex| | 2013-8-5 13:25 | 只看该作者
Imakey 发表于 2013-8-2 09:55
后来你找到处理方法没??

我只是把“Temp”改成了“Temp1”,编译就成功了。但是还是弄不明白为什么会产生那样的问题,C应该是区分大小写的呀,难不成Keil不区分大小写?

使用特权

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

本版积分规则