Do I need an extern “C” block to include standard POSIX C headers?

前端 未结 6 1838
一向
一向 2020-11-29 11:21

Do I need an extern \"C\" {} block to include standard C headers in a C++ program. Only consider standard C headers which do not have counterparts in C++.

6条回答
  •  陌清茗
    陌清茗 (楼主)
    2020-11-29 11:40

    The system C headers usually already include a extern "C" block, guarded by #ifdef __cplusplus. This way the functions automatically get declared as extern "C" when compiled as C++ and you don't need to do that manually.

    For example on my system unistd.h and fcntl.h start with __BEGIN_DECLS and end with __END_DECLS, which are macros defined in sys/cdefs.h:

    /* C++ needs to know that types and declarations are C, not C++.  */
    #ifdef   __cplusplus
    # define __BEGIN_DECLS  extern "C" {                                            
    # define __END_DECLS }
    #else
    # define __BEGIN_DECLS
    # define __END_DECLS
    #endif
    

提交回复
热议问题