我正在研究 GSL 库中的一段代码,并且对头文件开头的几行感到困惑。我了解#undef、#ifdef 等的作用,但我不明白的是,为什么他们基本上重置了 _BEGIN_DECLS 的定义,然后再继续定义它?从技术上讲,不应该有任何先前的定义,对吧?我的意思是,这些东西是静态的,不会发生变化。无论如何,这是代码的摘录:
#undef __BEGIN_DECLS
#undef __END_DECLS
#ifdef __cplusplus
# define __BEGIN_DECLS extern "C" {
# define __END_DECLS }
#else
# define __BEGIN_DECLS /* empty */
# define __END_DECLS /* empty */
#endif