Когда читаешь это документ, в конце есть одно предложение:
Исторически компиляторы для многих языков, включая C ++ и Fortran, были реализованы как «препроцессоры», которые испускают другой язык высокого уровня, такой как C.
Не имеете представления о препроцессорах, какой-либо документ? Означает ли это, что все эти языки будут переведены в исходные коды C?
Я думаю, что было бы лучше использовать термин переводчик из источника в источник вместо «препроцессоров», что делает его двусмысленным по смыслу, но и в этом нет ничего плохого.
По сути, компилятор — это компьютерная программа, которая переводит исходный код с языка программирования высокого уровня на язык более низкого уровня (например, язык ассемблера или машинный код). Но документ в вопросе гласит:
Исторически, компиляторы для многих языков, в том числе C ++ и Fortran,
Был реализованы как «препроцессорыКоторые излучают еще один высокий уровень
язык, такой как C.
Согласно этому описанию, можно сказать, что ранее компиляторы реализованы как переводчик из источника в источник . Транслятор также является формой препроцессора, но он отличается от препроцессора, используемого в программе.
Переводчик — это компьютерная программа, которая переводит написанную программу
в данном языке программирования в функционально эквивалентную программу
на другом языке.
Теперь, приходя к препроцессор, используемый в программе , давайте возьмем пример:
#include <stdio.h>// a PREPROCESSOR directive
Препроцессор — это программа, которая обрабатывает исходный файл до того, как
основная компиляция, (аналогично переводчику) но разница заключается в том, что ЗДЕСЬ он обрабатывает директивы, имена которых начинаются с #.
Вот #include
это директива. Эта директива заставляет препроцессор добавлять содержимое stdio.h
подать в ваш
Программа. Это типичное действие препроцессора: добавление или замена текста в исходном коде.
до его компиляции.
Некоторые языки были реализованы с помощью компилятора, генерирующего код C, который затем компилируется компилятором C. Известные примеры включают в себя:
cfront
сгенерированный код C из кода C ++. Это перестало быть практичным, когда C ++ поддерживал исключения (читайте Страуструп Дизайн и эволюция C ++ для получения дополнительной информации), но не все компиляторы C ++ использовали эту технику (на самом деле, я не знаю ни одного другого компилятора, кроме cfront
это сделал)Фраза «препроцессор» теперь имеет совершенно другое значение и вводит в заблуждение ее использование здесь. Но, да, здесь это означает, что некоторые компиляторы выводят свой источник на другой язык.
Это надо называть компилятор исходного кода. Одним из примеров является Cfront (разработанный Бьярном Страуструпом), который преобразовал C ++ в C.
Для нормального значения фразы «препроцессор» в C ++, см. Вот.
Нет, не обязательно Многие компиляторы C ++, КАК СКАЗАЛ ДОКУМЕНТ GCC, (но не gcc / g ++) производят вывод кода C. Почему они это делают? Таким образом, они могут использовать весь исполняемый код бэкенда, с которым могут компилироваться компиляторы C (X86, AMD и т. Д.). Имея C в качестве кода назначения, они сохраняют много низкоуровневого кодирования на серверной части. К таким компиляторам относятся оригинальный Cfront и Comeau C / C ++.