including a header file twice in c++

前端 未结 5 1759
失恋的感觉
失恋的感觉 2021-01-01 17:03

What happens if I include iostream or any other header file twice in my file? I know the compiler does not throw error.

Will the code gets added twice

5条回答
  •  情书的邮戳
    2021-01-01 17:29

    It depends. With the exception of , the standard requires the second (and later) includes of a standard header to be a no-op. This is a characteristic of the header, however; the compiler will (at least conceptually) read and include all of the header text each time it encounters the include.

    The standard practice for avoiding multiple definitions in such cases is to use include guards: all of the C++ code in the header will be enclosed in something like:

    #ifndef SPECIAL_NAME
    #define SPECIAL_NAME
    //  All of the C++ code here
    #endif SPECIAL_NAME
    

    Obviously, each header needs a different name. Within an application, you can generally establish conventions based on the filename and location; something like subsystem_filename, with characters not legal in a C++ symbol (if you're using them in your filenames) mapped (and very often everything upper cased). For libraries, the best practice would be to generate a reasonably long random sequence of characters; far more frequent (although certainly inferior from a quality of implementation standpoint) is to ensure that every such symbol begin with a documented prefix.

    A system library can, of course, use reserved symbols (e.g. a symbol starting with an underscore followed by a capital letter) here, to guarantee that there is no conflict. Or it can use some entirely different, implementation dependent technique. Microsoft, for example, uses a compiler extension #pragma once; g++ uses include guards which always start with _GLIBCXX (which isn't a legal symbol in user code). These options aren't necessarily available to you.

提交回复
热议问题