#ifndef...#define...#else...#define 一般用在什么场合?

请问:
1、
#ifndef EXTERN
#define EXTERN
#else
#define EXTERN extern

2、
#indef XXX
#define XXX extern
#else
#define XXX
这两主要用在什么场合?

避免头文件重复包含导致重复定义;同样一份源代码,根据不同条件(不同操作系统/调试或者发布版本/不同cpu/不同功能裁剪等)编译成不同版本;同样一份代码,兼容不同的编译器

就是判断某个宏有没有定义,没有就定义它,主要是用在一些编译开关选项等上面