Я изучаю фрагмент кода из библиотек 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