none
h和.cpp,以及Stack s和Stack *s = new Stack();的区别 RRS feed

  • 问题

  • 1、关于类的组成文件:很多都是又.h和.cpp组成,单独写道.h的文件中和前者的区别。

    2、Stack s和Stack *s = new Stack();有啥区别。

    ==============================================================《刚入门,总结中》

    2010年5月27日 11:18

答案

  • cl:cpp->obj

    link:obj->exe

    在编译时cpp文件里的函数变成了二进制机器代码obj文件。

    在链接的时候,链接器根据.h文件里的定义在obj中找到对应二进制机器代码链接生成exe

    .h只有在被cpp包含时里面的代码才会生成obj.

    如果.h中含有代码,并且被多个cpp包含,那么生成的多个obj文件中会同时都存在一部分一样的二进制机器代码,这样链接时链接器就不知道该链接哪个obj里面的代码了,因为他们都是同名的。这是会报link错误XXXXX函数在XXXX.obj文件里已定义。

     


    0xBAADF00D
    • 已标记为答案 意凡 2010年5月29日 23:07
    2010年5月28日 14:56
    版主

全部回复

  • 1。编译器只编译cpp/c,h文件不被包含是不会被编译的

    2。前者分配在线程栈里,最大一般不能超过1M,后者在堆里,理论上你内存多大他就可以分配多大


    0xBAADF00D
    2010年5月27日 12:38
    版主
  • 一般写个类

    stack.h   stack.cpp

    为什么不把所有的代码写到stack.h文件里面呢?

    而要把类的声明函数和实现逻辑分开写。“区别”在哪里。

    编译的时候的为啥只包含stack.h.h文件,就可以调用stack.h.cpp里面的函数逻辑。

    2010年5月27日 13:05
  • cl:cpp->obj

    link:obj->exe

    在编译时cpp文件里的函数变成了二进制机器代码obj文件。

    在链接的时候,链接器根据.h文件里的定义在obj中找到对应二进制机器代码链接生成exe

    .h只有在被cpp包含时里面的代码才会生成obj.

    如果.h中含有代码,并且被多个cpp包含,那么生成的多个obj文件中会同时都存在一部分一样的二进制机器代码,这样链接时链接器就不知道该链接哪个obj里面的代码了,因为他们都是同名的。这是会报link错误XXXXX函数在XXXX.obj文件里已定义。

     


    0xBAADF00D
    • 已标记为答案 意凡 2010年5月29日 23:07
    2010年5月28日 14:56
    版主