IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

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

    天下发表于 2015-10-29 08:14:00
    love 0
    转: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;这样的前置声明是不被接受的.


    天下 2015-10-29 16:14 发表评论


沪ICP备19023445号-2号
友情链接