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