为什么在#undef 指令之后使用#define?

Why is #define used after an #undef directive?

我正在查看开源 FANN library. As far as I have examined, the developers contributing to the project are quite experienced in C programming. But I wonder why they do the following in doublefann.h 文件:

#undef DOUBLEFANN
#define DOUBLEFANN

使用 #undef 删除标识符然后使用 #define 重新定义它的目的是什么?

我不认为有什么秘密;只是该代码的作者想要覆盖 DOUBLEFANN 的任何现有预处理器值(例如,由某些头文件中较早的行设置,或者可能由 -DDOUBLEFANN=something 参数提供编译器的命令行)并将其替换为他自己定义的 DOUBLEFANN 作为具有空值的已定义预处理器宏。

至于为什么作者认为有必要这样做,我不知道。