стандартный main и unicode, управляющий консольным вводом и выводом - PullRequest
1 голос
/ 08 января 2020

Стандарт распознает точки входа int main() и int main(int, char* []), и не существует версии функции в Юникоде, за исключением, конечно, если это предусмотрено реализацией, такой как wmain для windows.

I есть код, который строго использует «широкие» строки ie. wchar_t и std::wstring, ни один LO C не использует тип char.

Также весь «вывод программы» печатается с помощью std::wcout.

Теперь я понимаю, что когда программа запускается, ее поток будет установлен на «широкий» поток, и даже если где-то в коде вместо 1015 * появится код std::cout, вывод может быть неправильным.

Теперь мой первый недоразумение заключается в том, что если пользователь запускает несколько инструментов командной строки в одном терминале (ie. cmd.exe), где одна программа использует широкие строки, а другая использует строки ASCII, то каково поведение терминала?

это обрабатывает оба потока просто отлично? Широкий поток и не широкий поток связаны с программой, а не с терминалом?

Во-вторых, моя главная проблема заключается в том, что моя программа «Юникод» ожидает ввода данных пользователем, который, скорее всего, будет char, потому что int main(int, char* []) принимает char строка, но мой код использует wide строки.

Какие у меня варианты? мне нужно преобразовать входные строки не в Юникоде в широкие строки?

И что произойдет, если я использую int wmain(int, wchar_t* []) на windows? как узнать, будет ли терминал интерпретировать ввод пользователя как широкие символы и пересылать их в мою точку входа?

что если пользователь скопирует / вставит строку ASCII в консоль в качестве ввода в мою точку входа?

Таким образом, мои вопросы таковы: ввод и вывод консольной программы char и wchar_t как в переносном, так и в переносном коде, по стандарту отсутствует широкая основная функция, что меня больше всего смущает в сочетании с различными терминалами.

edit

Для ясности,

  1. Я хочу использовать стандартные main и широкие строки.
  2. мой код использует широкую строку.
  3. моя программа ожидает ввода пользователя и записывает вывод. так как лучше всего справиться с этим?
  4. Является ли wmain единственным решением для получения ввода Unicode и как терминалы работают в отношении Unicode против Non Unicode с различными программами в одном сеансе консоли.
...