Реферат: Препроцессор языка C.
"Наследование" это то, что происходит, когда какой либо объект или
файл образует некоторую часть своего содержимого путем виртуального
копирования из другого объекта или файла. В случае подключаемых С файлов
наследование означает, что один файл включает другой файл, а затем заменяет
или добавляет что-либо.
Если наследуемый подключаемый файл и основной подключаемый файл имеют
различные имена, то такое наследование называется прямым. При этом
используется конструкция '#include "BASE"' в наследуемом файле.
Иногда необходимо чтобы у наследуемого и основного подключаемого файла
были одинаковые имена.
Например, предположим, что прикладная программа использует системный
подключаемый файл 'sys/signal.h', но версия файла '/usr/include/sys/signal.h'
на данной системе выполняет того, что требуется в прикладной программе.
Будет удобнее определить локальную версию, возможно с именем
'/usr/local/include/sys/signal.h' для замены или добавления к версии,
поставляемой с системой.
Это можно выполнить с применением опции '-I.' при компиляции, а также
созданием файла 'sys/signal.h' который выполняет требуемые программе функции.
Но сделать так, чтобы этот файл включал стандартный файл 'sys/signal.h' не
так просто. При включении строки '#include <sys/signal.h>' в этот файл
произойдет подключение новой версии файла, а не стандартной системной версии.
Это приведет к рекурсии и ошибке при компиляции.
При использовании директивы `#include </usr/include/sys/signal.h>'
нужный файл будет найден, но этот способ является не эфективным, так как
содержит полный путь к системному файлу. Это может отразиться на содержании
системы, так как это означает, что любые изменения местоположения системных
файлов потребуют дополнительных изменений где-либо еще.
Более эффективным решением этой проблемы является применение директивы
'#include_next', которая используется для подключения следующего файла с