C++分析研究  
C++
日历
<2013年6月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456
统计
  • 随笔 - 92
  • 文章 - 4
  • 评论 - 4
  • 引用 - 0

导航

常用链接

留言簿

随笔档案

文章档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜

 

  前置声明的好处很多, 比如能避免头文件互相包含的冲突, 比如有时我们在一个头文件中只需要另一个头文件的某个类型定义, 只需要对它做一下前置声明即可,

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

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

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

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

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

  #a.h:

  [cpp] typedef struct my_time_t

  {

  int hour, minute, second;

  } MY_TIME;

  typedef struct my_time_t

  {

  int hour, minute, second;

  } MY_TIME;

  #b.h

  [cpp] struct my_time_t;

  typedef struct my_time_t MY_TIME;

  void func(MY_TIME* mt) {}

  struct my_time_t;

  typedef struct my_time_t MY_TIME;

  void func(MY_TIME* mt) {}

  #main.cpp

  [cpp] #include "a.h"

  #include "b.h"

  int main()

  {

  MY_TIME mt;

  func(&mt);

  return 0;

  }

  #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 2013-06-18 09:52 HAOSOLA 阅读(594) 评论(1)  编辑 收藏 引用
评论:
  • # re: c/c++ 前置声明 -- typedef问题  宁采臣 Posted @ 2013-06-20 11:46
    直接做struct MY_TIME;这样的前置声明是不被接受的。
    是的,文章写的不错,对我帮助很大。但是讲的点到即停了,没有深度,可以再深度挖掘以下。  回复  更多评论   


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


 
Copyright © HAOSOLA Powered by: 博客园 模板提供:沪江博客
PK10开奖 PK10开奖