GKE*_*KED 8 c++ c-preprocessor preprocessor-directive
我正在研究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
Run Code Online (Sandbox Code Playgroud)
Jam*_*lis 10
#define除非参数列表和替换列表相同,否则不允许使用已定义的宏.
如果__BEGIN_DECLS先前被定义为被其他东西替换extern "C" {,那么#define __BEGIN_DECLS extern "C" {将无效并且程序将是不正确的.
从技术上讲,不应该有任何先前的定义,对吗?
肯定会有.