私は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