Как std :: cout знает, где печатать? - PullRequest
3 голосов
/ 12 апреля 2020

Почему открывается окно терминала, когда я запускаю свою программу на C ++, и как std::cout узнает, что оно должно печатать на этот терминал?

Ответы [ 2 ]

4 голосов
/ 12 апреля 2020

Каждая операционная система имеет так называемый «стандартный поток вывода», когда вы используете cout, c ++ просто сообщает операционной системе о печати в поток. Операционная система определяет, куда ее выводить.

0 голосов
/ 12 апреля 2020

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

Тип приложения обычно выбирается при запуске нового проекта. но в старых компиляторах консольный тип был единственным доступным типом. MS-DOS и CP / M предоставляли терминальные сервисы, при этом интерпретатор командной строки, такой как «command.com», был бы программой по умолчанию, которая могла вызывать другие программы, такие как «myCppApp.exe».

Включенные терминальные сервисы поток ввода (то, что вы набрали на клавиатуре) и поток вывода (то, что отображалось на экране). Они обрабатывались как специальные файлы, которые были доступны только для чтения (cin) и writeonly (cout).

C / C ++ предоставлял доступ к этим стандартным службам операционной системы диска посредством cin / cout.

Когда windows вместо использования текстовой консоли (которую вы все еще видите на некоторых компьютерах при загрузке или в настройках B IOS) люди предпочитали использовать виртуальную консоль windows, которая эмулировала текстовую консоль в графической пользовательский интерфейс.

Таким образом, это своего рода комбинация операционной системы, предоставляющей подходящую среду, и компилятора, предоставляющего код времени выполнения, основанный на факте создания консольного приложения.

...