打印
[STM32F1]

C语言语法问题

[复制链接]
1871|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
TT5656|  楼主 | 2014-5-4 21:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大致情况是这样的,一个比较大的程序,很多头文件,其中有两个比如a.h和b.h,两个头文件都包含了另一个头文件,比如a.h部分如下:
#ifndef A_H
#define A_H
#include "b.h"
type struct
{...
}SS;
....
b.h部分:
#ifndef B_H
#define B_H
#include "a.h"
void aa(SS dd);   //一个函数的声明
....
编译后就显示b.h里的SS没定义,一定要把结构体定义放到b.h里才能声明此函数。但是如果没有那个函数声明的话,包含了b.h的文件还是可以用SS这个类型的。
这里有语法问题吗,我后来单独建了一个工程试验一下就这两个头文件貌似又没问题。。。
沙发
aozima| | 2014-5-4 23:34 | 只看该作者
本帖最后由 aozima 于 2014-5-4 23:36 编辑

1. 循环包含了,虽然没问题,但容易把自己搞死掉。

2. 在b.h中inc a.h时,如果b.h本身是被a.h所inc的话,那么此时 type struct...这段还末生效。。。
因为在a.h中,inc b.h在结构体声明之前,原因参考1

3. 项目组中谁写么写代码会被批斗。屡教不改者,那就不用再改了。

使用特权

评论回复
板凳
TT5656|  楼主 | 2014-5-4 23:50 | 只看该作者
aozima 发表于 2014-5-4 23:34
1. 循环包含了,虽然没问题,但容易把自己搞死掉。

2. 在b.h中inc a.h时,如果b.h本身是被a.h所inc的话, ...

奇怪的是,把该声明放在一公共头文件中让两个都包含还是有同样的问题,这就想不通了

使用特权

评论回复
地板
mmuuss586| | 2014-5-5 08:25 | 只看该作者
TT5656 发表于 2014-5-4 23:50
奇怪的是,把该声明放在一公共头文件中让两个都包含还是有同样的问题,这就想不通了 ...

你这样改是没有问题的;
可能你哪里函数调用有问题吧;

使用特权

评论回复
5
aozima| | 2014-5-5 10:21 | 只看该作者
奇怪的是,把该声明放在一公共头文件中让两个都包含还是有同样的问题,这就想不通了

直接包含和用另一个头文件包含有什么区别?
搞了半天你都没有自己好好推想一下,

把a.h中的 #include "b.h" 去掉,或挪到后面即可。

使用特权

评论回复
6
海中水| | 2014-5-5 10:33 | 只看该作者
循环包含的问题,区分一下预定义,编译,连接的问题就明白了。

使用特权

评论回复
7
拿起书本| | 2014-5-7 09:19 | 只看该作者
每一个.h文件都有一个独特的结构体定义,而在另外的a.c,b.c都要使用对方的这个结构体。

使用特权

评论回复
8
mkmklyuyu| | 2014-5-9 11:36 | 只看该作者
我从来不会遇到这些问题,因为我有良好的书写规范:一个项目里我都会有个一全局变量的头文件和C文件,如:
C文件里:int xxx=0x88;
相对应的H文件里:
extern int xxx;
其他文件再包含他就行了!

使用特权

评论回复
9
usst_mcclane| | 2014-5-9 12:25 | 只看该作者
好好看看有关头文件的资料

使用特权

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

本版积分规则

13

主题

61

帖子

0

粉丝