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
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…