What is the difference between a .cpp file and a .h file?

后端 未结 8 2051
余生分开走
余生分开走 2020-12-02 11:52

Because I\'ve made .cpp files then transfered them into .h files, the only difference I can find is that you can\'t #include .cpp files. Is there any difference that I am m

相关标签:
8条回答
  • 2020-12-02 12:21

    A header (.h, .hpp, ...) file contains

    • Class definitions ( class X { ... }; )
    • Inline function definitions ( inline int get_cpus() { ... } )
    • Function declarations ( void help(); )
    • Object declarations ( extern int debug_enabled; )

    A source file (.c, .cpp, .cxx) contains

    • Function definitions ( void help() { ... } or void X::f() { ... } )
    • Object definitions ( int debug_enabled = 1; )

    However, the convention that headers are named with a .h suffix and source files are named with a .cpp suffix is not really required. One can always tell a good compiler how to treat some file, irrespective of its file-name suffix ( -x <file-type> for gcc. Like -x c++ ).

    Source files will contain definitions that must be present only once in the whole program. So if you include a source file somewhere and then link the result of compilation of that file and then the one of the source file itself together, then of course you will get linker errors, because you have those definitions now appear twice: Once in the included source file, and then in the file that included it. That's why you had problems with including the .cpp file.

    0 讨论(0)
  • 2020-12-02 12:27

    By convention, .h files are included by other files, and never compiled directly by themselves. .cpp files are - again, by convention - the roots of the compilation process; they include .h files directly or indirectly, but generally not .cpp files.

    0 讨论(0)
  • 2020-12-02 12:30

    The C++ build system (compiler) knows no difference, so it's all one of conventions.

    The convention is that .h files are declarations, and .cpp files are definitions.

    That's why .h files are #included -- we include the declarations.

    0 讨论(0)
  • 2020-12-02 12:30

    .h files, or header files, are used to list the publicly accessible instance variables and and methods in the class declaration. .cpp files, or implementation files, are used to actually implement those methods and use those instance variables.

    The reason they are separate is because .h files aren't compiled into binary code while .cpp files are. Take a library, for example. Say you are the author and you don't want it to be open source. So you distribute the compiled binary library and the header files to your customers. That allows them to easily see all the information about your library's classes they can use without being able to see how you implemented those methods. They are more for the people using your code rather than the compiler. As was said before: it's the convention.

    0 讨论(0)
  • 2020-12-02 12:31

    I know the difference between a declaration and a definition.

    Whereas:

    • A CPP file includes the definitions from any header which it includes (because CPP and header file together become a single 'translation unit')
    • A header file might be included by more than one CPP file
    • The linker typically won't like anything defined in more than one CPP file

    Therefore any definitions in a header file should be inline or static. Header files also contain declarations which are used by more than one CPP file.

    Definitions that are neither static nor inline are placed in CPP files. Also, any declarations that are only needed within one CPP file are often placed within that CPP file itself, nstead of in any (sharable) header file.

    0 讨论(0)
  • 2020-12-02 12:34

    A good rule of thumb is ".h files should have declarations [potentially] used by multiple source files, but no code that gets run."

    0 讨论(0)
提交回复
热议问题