天下

记录修行的印记

转:c/c++ 前置声明 -- typedef问题

转:c/c++ 前置声明 -- typedef问题
c/c++ 前置声明 -- typedef问题
cc++类结构体typedef前置声明
前置声明的好处很多, 比如能避免头文件互相包含的冲突, 比如有时我们在一个头文件中只需要另一个头文件的某个类型定义, 只需要对它做一下前置声明即可,

因为为了相对较小的目的要包含进来一个很大的头文件, 实在有些"不值", 况且这个头文件可能还要被其它很多文件再包含的, 这样代价就更大了.

所以做前置声明即可, 在源文件真正需要的时候再包含那个头文件.


之前也声明过类和c++方式定义的struct, 今天遇到了一个typedef的结构体, 结果前置声明不奏效了.


网上查了些资料, 有的帖子没有讨论出结果, 有的直接定性typedef的不能前置声明, 只能include进来.

幸好自己写小例子多测试了一会, 发现语法上还是支持的. 举例如下:

#a.h:
typedef struct my_time_t  
{  
    int hour, minute, second;  
} MY_TIME;  

#b.h
struct my_time_t;  
typedef struct my_time_t MY_TIME;  
  
void func(MY_TIME* mt) {}  

#main.cpp
#include "a.h"  
#include "b.h"  
  
int main()  
{  
    MY_TIME mt;  
    func(&mt);  
    return 0;  
}  

这样就可以成功了. 在b.h中做前置声明时, 先声明有my_time_t这样一个struct, 然后说明MY_TIME是由那个结构体typedef出来的, 

这样void func(MY_TIME* mt);这个函数声明就能编译通过了.   直接做struct MY_TIME;这样的前置声明是不被接受的.

posted on 2015-10-29 16:14 天下 阅读(607) 评论(0)  编辑 收藏 引用 所属分类: C/C++


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2013年3月>
242526272812
3456789
10111213141516
17181920212223
24252627282930
31123456

导航

统计

常用链接

留言簿(4)

随笔分类(378)

随笔档案(329)

链接

最新随笔

搜索

最新评论