Четко ли определено направление перевода программ?

Это может показаться очевидным, но просто из любопытства: четко ли определено направление трансляции программы (т.е. top-to-bottom, left-to-right)? Это явно определено в стандарте?

1 ответ

Решение

Исходный файл и единица перевода, полученная в результате включения заголовков через #includeдиректива, неявно представляет собой последовательность символов с одним размером. Я не вижу, чтобы это было явно указано в стандарте, но есть многочисленные ссылки на это измерение в стандарте, относящиеся к символам "за которыми следует" (C 2018 5.1.1.2 1 1) или "до" (6.10.2 5) другие символов, области видимости начинаются "после" появления тега или декларатора (6.2.1 7) и так далее.

Компилятор может читать и выполнять вычисления с частями единиц перевода в любом порядке, но значение единицы перевода определяется в терминах этого порядка от начала до конца.

Между строками нет "вверх" или "вниз". Строки имеют значение в определенных частях перевода C, например, в том, что директива предварительной обработки заканчивается символом новой строки. Однако между одними и теми же столбцами в разных строках не определена взаимосвязь, поэтому стандарт не определяет ничего значимого для подъема или опускания по строкам, кроме того факта, что это означает перемещение вперед или назад в потоке символов на определенное количество.

Стандарт действительно позволяет, чтобы исходные файлы могли состоять из строк текста, возможно, с картами Холлерита (перфокартами), в которых каждая отдельная карта представляет собой строку, или с файлами записей фиксированной длины, в которых каждая запись представляет собой фиксированное количество байтов (например, 80), и в файле физически не записаны символы новой строки. (Неявно каждая строка текста заканчивается после 80 символов.) Стандарт обрабатывает эти файлы так, как если бы в конце строки был вставлен символ новой строки (5.2.1 3), тем самым эффективно преобразовывая файл в единый поток символы.

Другие вопросы по тегам