Когда g cc воздействует на текстовый файл, видит ли он просто серию машинных кодов, представляющих символы ASCII? - PullRequest
1 голос
/ 20 июня 2020

В ожидании того, что меня будут выпотрошены более опытными и образованными людьми, я просто хочу извиниться за любые «взмахи руками» или неточные фразы, которыми пронизан мой следующий вопрос.

Я немного знаю о текстовых файлах, сканерах, синтаксических анализаторах (и компиляторах в целом) и о языке C, так что, надеюсь, этого достаточно, чтобы донести до меня суть моего запроса.


Когда я использую gcc на моем Windows 10 компьютере для компиляции текстового файла, написанного на C, что компилятор изначально видит на своих ранних этапах?

Например, допустим, у меня есть текстовый файл, который содержит исключительно ключевое слово C языка for. Больше ничего в этом файле нет. Когда я предлагаю gcc действовать с этим файлом, компилятор просто видит двоичное представление букв f (01100110 как его 8-битное представление), o (01101111) и r (01110010) ? Я полагаю, что, вероятно, существуют другие двоичные коды, которые говорят компилятору: «Это текстовый файл».

Так выглядит ли код машинного уровня, с которым работает компилятор, примерно так?

{ двоичный код в начале файла, чтобы сообщить компилятору, что это текст } _01100110_01101111_01110010_ {b исходный код в конце файла, чтобы сообщить компилятору, что это конец файла }

, где 01100110_01101111_01110010 - это представление for на уровне машины.

Спасибо!

1 Ответ

1 голос
/ 20 июня 2020

При вводе

для

в текстовом файле
компилятор сначала увидит тот факт, что он вызван вами для работы с этим файлом .
Из этого он сделает вывод, что это должен быть текстовый файл с кодом c. Иначе зачем вам просить его обработать этот файл? Таким образом, внутри содержимого файла нет "{двоичный код в начале файла, чтобы сообщить компилятору, что это текст}".

Тогда да, он читает f, o, r.

Это делается с помощью службы / функции операционной системы, которая в какой-то момент также предоставляет информацию о том, что был прочитан последний символ / байт. Однако эта информация не содержится в самом содержимом файла. Информация в конечном итоге поступает из метаданных, которые файловая система (доступ через операционную систему) имеет в файле, например, его длина в байтах (вместе с другими, например, точное местоположение на носителе).
Таким образом, нет "{ двоичный код в конце файла, чтобы сообщить компилятору, что это конец файла} "внутри содержимого файла.

Единственное, что близко к вашей информации" {binary} ", - это символ новой строки \n или пара возврата и новой строки \r\n, в зависимости от среды. Они обозначают границу между двумя строками (можно увидеть как начало новой строки или конец предыдущей).

Я пропустил несколько деталей, таких как участие препроцессора, чтобы сосредоточиться на идея вашего вопроса.
Строго говоря, когда компилятор (или часть программы, которая выполняет задание компиляции) работает, препроцессор (или часть программы, которая выполняет задание предварительной обработки) уже завершена.

...