Однако немного странный вопрос, если я правильно помню, исходный код C ++ не требует файловой системы для хранения файлов.
Наличие компилятора, который сканирует рукописные документы через камеру, было бы соответствующей реализацией. Хотя практически не имеет особого смысла.
Однако C ++ 20 теперь добавляет расположение источника с расширением file_name
. Означает ли это, что исходный код всегда должен храниться в файле?
__FILE__
. Классsource_location
просто позволяет вам получить его на сайте вызова функции.<iostream>
эти, могут не быть файлами (если вы понимаете, что я имею в виду), а не файлами, написанными разработчиками?Ответы:
Нет, исходный код не обязательно должен быть из файла (или переходить в файл).
Вы можете скомпилировать (и связать) C ++ полностью внутри канала, поместив свой компилятор посередине, например
и так было десятилетиями. Смотрите также:
Введение
std::source_location
в C ++ 20 не меняет этого положения вещей. Просто у некоторого кода не будет четко определенного местоположения источника (или оно может быть четко определено, но не очень значимо). На самом деле, я бы сказал , что настаивание на определении сstd::source_location
помощью файлов немного близорук ... хотя справедливости ради, это просто макро-менее эквивалент__FILE__
и__LINE__
которые уже существуют в C ++ (и C).@ HBv6 отмечает, что если вы напечатаете значение
__FILE__
при компиляции с использованием GCC из стандартного входного потока:запуск полученного исполняемого файла печатает
<stdin>
.Исходный код может быть получен даже из Интернета.
@Morwenn отмечает, что этот код:
работает на GodBolt (но не будет работать на вашем компьютере - ни один популярный компилятор не поддерживает это.)
Вы языковой юрист? Хорошо, давайте посмотрим на стандарт ..
Вопрос о том, должны ли исходные коды программ C ++ происходить из файлов, не имеет четкого ответа в языковом стандарте. Глядя на черновик стандарта C ++ 17 (n4713), раздел 5.1 [lex.separate] гласит:
Итак, исходный код не обязательно хранится в файле как таковом, а в «модуле, называемом исходным файлом». Но тогда откуда берутся включения? Можно было бы предположить, что они поступают из именованных файлов в файловой системе ... но это тоже не является обязательным.
В любом случае,
std::source_location
похоже , это не меняет эту формулировку в C ++ 20 или не влияет на ее интерпретацию (AFAICT).источник
Еще до C ++ 20 в стандарте были:
Определение то же самое для
source_location::file_name
.Таким образом, не было изменений в отношении поддержки реализаций без файловой системы в C ++ 20.
Стандарт не совсем точно определяет, что означает «исходный файл», поэтому вопрос о том, относится ли он к файловой системе, зависит от интерпретации. Предположительно, реализация могла бы соответствовать созданию «рукописной заметки, которую вы мне дали только тогда», если она действительно идентифицирует «исходный файл» в этой реализации языка.
В заключение: Да, по стандарту источники называются «файлами», но что такое «файл» и задействована ли файловая система, не определено.
источник
scanner-c++
возвращение «Левый шкаф, третий ящик, четвертая папка с красными вкладками, страница 17» .