结构体的声明与定义分离

Posted WFUF

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了结构体的声明与定义分离相关的知识,希望对你有一定的参考价值。

    最近看到一种比较新颖的写法 —— 结构体在头文件中声明, 源文件中定义

    A.h

typedef struct Context Context;

    A.cpp

#include "stdafx.h"
#include "A.h"

struct Context
{
    int param;
    char *str;
};

    原以为这样应该会报错, 因为头文件中的 "struct Context" 应该是找不到的, 但amazing, 竟然能顺利编译过, 由此让我加深了对声明和定义的理解.

    就像函数在头文件中声明, 而在源文件中定义一样, 因为函数的声明和定义一般都分开写, 所以习以为常, 但结构体一般都是声明和定义一起的, 或者说只有定义吧, 所以对这写法一下子没反应过来.

    这样写的好处是: 对用户透明. 试想一下, 你要写一个库, 里面有个结构体, 但这个结构体只是内部使用和作为参数传递, 那么用户自然就不关心这结构题的内部结构了, 用户只要知道哪个函数返回该结构体和哪个函数要使用该结构体作为参数, 只要引用和传递, 所以, 只在头文件声明该结构体, 让用户可以声明和传递这一结构体的变量即可.

    类也可以声明和定义分开, 但好处暂时未想到. 这是C++的思想了!

    学术浅薄, 不足之处, 望请指出

以上是关于结构体的声明与定义分离的主要内容,如果未能解决你的问题,请参考以下文章

函数的定义与声明

深度剖析结构体@自定义类型1---结构体的声明,自引用,变量定义和初始化 + 结构体内存对齐 + 结构体传参 + 结构体实现位段

结构体的声明是在文件中的那个位置,函数的声明是在引用函数的声明部分还是在整个文件开始

C语言自定义数据类型之结构体

自定义类型详解

C语言结构体定义