Препроцесор C приєднаний до C, але він має зовсім інший синтаксис від основної мови:
синтаксично значущий пробіл (кінець рядка завершує оператор, пробіл після макросу визначає початок списку заміни)
Блоки на основі ключових слів замість дужок,
elif
замістьelse if
визначення на основі ключових слів, а не декларація-відображає використання, немає
=
для визначення значеннянатяки на альтернативний синтаксис рядків (
#include <>
vs#include ""
)лінива оцінка (очевидно, що C; але 6.10.3.1 може сприйматися як такий, що передбачає певний порядок розширення макросу, в кількох важливих місцях)
Це насправді зовсім не схоже на C! Технічно це є його власна мова, але він завжди був використаний в якості майже-невід'ємна частина C , і здається дуже дивним , що він не буде інтегруватися з нею синтаксично.
Вікіпедія не розповідає про свою історію; сховище Портлендського зразка дає про це згадку , але не вникає в деталі поза тим, що його розробили інші люди, крім решти веб-сайту C. Денніс Річі з історією C, мабуть, мав відповідь, але, на жаль, немає більше доступні.
Як макродвіжка, це , очевидно , має дуже різну семантику від мови виконання, який би пояснити деякі відмінності, але не візуальні аспекти дизайну (це також неясно , сучасний погляд , чи була вона спочатку передбачалися як здатний на вигляд від задоволення , що його система заміни дозволяє чи це був "просто" доцільний спосіб вбудувати функції за час до потужних оптимізаторів). Схоже, щось ближче до того, що в кінцевому підсумку стали шаблонами C ++, було б більш логічною еволюцією до макросів, якби C-подібна семантика насправді була вихідною точкою, але для цього є менш конкретні докази, ніж для синтаксису.
Чи є у нас записи про те, чому це було розроблено таким чином, чи якими були впливи творців?