天天看点

《gcc五分钟系列》第七节:声明与定义的区别

《gcc五分钟系列》第七节:声明与定义的区别

    解释了好多遍,还是有同学不了解在c/c++中声明和定义的区别。这里简单介绍一下。

    1、变量

        声明:

            extern int a;

        定义:

            int a;

    2、函数

        声明:

            void fun();

        定义:

            void fun(){}

    3、结构体/类

            class bar;

            class bar{};

    那么,声明和定义的本质区别是什么?

    答:声明没有为符号分配存储空间、定义会为符号分配存储空间。

        extern int a;

        这句话是告诉编译器,变量a在别的地方有了,所以不需要在这为它分配存储空间了。

        int a;

        这句话是告诉编译器,我需要创建一个变量,请为它分配存储空间。

        void fun();

        函数体包含若干语句,编译后会产生若干指令。声明是告诉编译器,这个函数的指令保存在别的地方了。

        void fun(){}

        这里会为这个函数分配存储空间、保存函数的指令。

        class bar;

        同样不分配存储空间。

        class bar{};

        一个结构体/类在定义的时候会产生它的各种指针,以及内存分配方式的代码。

    感觉解释的不是很清楚,不过我能力也就如此了。建议大家多实践,多看看书。

    本节完。