И пример насыщения/раздувания кода при помощи таких "важных" фич, как макросы и пространства имён.

Намедни копался в заголовках... Пример определения типа time_t в time.h:
## Код:
```
#if !defined __time_t_defined && (defined _TIME_H || defined __need_time_t)
# define __time_t_defined   1

# include <bits/types.h>

__BEGIN_NAMESPACE_STD
/* Returned by `time'.  */
typedef __time_t time_t;
__END_NAMESPACE_STD
#if defined __USE_POSIX || defined __USE_MISC || defined __USE_SVID
__USING_NAMESPACE_STD(time_t)
#endif

#endif /* time_t not defined and <time.h> or need time_t.  */
#undef   __need_time_t
```
Снаружи обвязка для оптимизации, чтобы препроцессору меньше колбасить. Дальше обёртка, засовывающая имя в пространство имён std. Это дело придумали не сразу, поэтому потом при определённых условиях имя высовывается обратно в глобальное пространство имён, для обратной совместимости.

Суть (для 32 бит КП/ББ) в одной строчке интерфейсного модуля LinLibc:## Код:
```
TYPE time_t = INTEGER;
```
Ради которой нужно ещё зайти в bits/types.h## Код:
```
__STD_TYPE __TIME_T_TYPE __time_t;   /* Seconds since the Epoch.  */
```
Потом в bits/typesizes.h## Код:
```
#define __TIME_T_TYPE      __SLONGWORD_TYPE
```
И снова вернуться в bits/types.h## Код:
```
#define __SLONGWORD_TYPE   long int
```
Вот так, наверное, и получаются сотни тысяч строк кода.