Препроцессор C подключен к C, но его синтаксис совершенно отличается от основного языка:
синтаксически значимые пробелы (конец строки завершает оператор, пробел после макроса определяет начало списка замены)
блоки на основе ключевых слов вместо фигурных блоков
elif
вместоelse if
определения на основе ключевых слов вместо объявления-отражает-использование, нет
=
для определения значенияподсказки альтернативного строкового синтаксиса (
#include <>
против#include ""
)ленивая оценка (очевидно, C; но 6.10.3.1 может быть прочитан как подразумевающий определенный порядок макроразложения, а также в тех немногих местах, которые имеют значение)
Это действительно не похоже на C на всех! Технически это является его собственный язык, но он всегда был использован в качестве почти-неотъемлемая часть C , и кажется очень странным , что он не будет интегрироваться с ней синтаксически.
Википедия не говорит о своей истории; Портлендский репозиторий паттернов упоминает об этом мимолетно , но не вдавается в подробности, кроме того факта, что он был разработан другими людьми, чем остальная часть сайта С. Денниса Ричи с историей Си, вероятно, имел ответ, но, к сожалению, нет дольше доступны.
Как макродвижка, это , очевидно , имеет очень разную семантику от языка исполнения, который бы объяснить некоторые различия, но не визуальные аспекты дизайна (это также неясно , современный взгляд , была ли она изначально предполагались как способен на вид от удовольствия , что его замена системы позволяет, или это был «просто» целесообразный способ встроить функции за время до мощных оптимизаторов). Похоже, что-то ближе к тому, что в итоге стало шаблонами C ++, было бы более логичной эволюцией в сторону макросов, если бы C-подобная семантика фактически была отправной точкой, но есть меньше конкретных доказательств этого, чем для синтаксиса.
У нас есть какие-либо записи о том, почему он был разработан таким образом, или как повлияли создатели?