Я изучаю кусок кода из библиотек 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