powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Почему cout не замакросили?
25 сообщений из 26, страница 1 из 2
Почему cout не замакросили?
    #38589996
Uni
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Uni
Гость
Всех приветствую!

Друзья, работаю под Builder XE2. Возник вопрос: почему разработчики Embarcadero не замакросили cout и wcout, дабы юзать единый cout и не париться? И я так понимаю, это касается не только iostream. Почему не сделать единые функции (без постфиксов A/W), как у WinAPI-функций?

Кстати, если не сложно, сообщите, как с этим делом (cout/wcout) обстоят у Студии?


Спасибо!
...
Рейтинг: 0 / 0
Почему cout не замакросили?
    #38590008
Uni
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Uni
Гость
Хм... Оказалось, что wcout поддерживает MBCS (char) o_O... Шо за бред?
...
Рейтинг: 0 / 0
Почему cout не замакросили?
    #38590011
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Файлу глубоко пофиг что в него пихается.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Почему cout не замакросили?
    #38590015
Uni
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Uni
Гость
Dimitry Sibiryakov, пардон, какому файлу?
...
Рейтинг: 0 / 0
Почему cout не замакросили?
    #38590022
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стандартному потоку вывода. Который, как ни странно, файл.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Почему cout не замакросили?
    #38590026
Uni
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Uni
Гость
Dimitry Sibiryakov, понятно, спасибо :)

Ну раз ответа на свой изначальный вопрос я не получу, то, быть может, кто-нибудь пояснит, как работает wcout?

Пробую банальный пример:

Код: plaintext
1.
2.
3.
4.
5.
#include <iostream>
 
int main() {
  std::wcout << L"Привет!" << std::endl;
}



В консоли получаю: "??????!".

Вопросы:
1) Какая кодировка на выходе у wcout?
2) В какую кодировку надо перевести консоль, дабы лицезреть русский язык?

P.S. Интересует решение без использования locale.
...
Рейтинг: 0 / 0
Почему cout не замакросили?
    #38590029
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для начала скажи какой ОСи у тебя консоль.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Почему cout не замакросили?
    #38590030
Uni
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Uni
Гость
Dimitry Sibiryakov, Win 7 x64 RU.
...
Рейтинг: 0 / 0
Почему cout не замакросили?
    #38590038
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UniWin 7 x64 RU.
Какой шрифт используется? Должна быть Lucida Console, ни в коем случае не "растровый шрифт".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Почему cout не замакросили?
    #38590041
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Uni, попробуй

Код: plaintext
1.
2.
3.
$ chcp 866
...
$ chcp 1251
...
Рейтинг: 0 / 0
Почему cout не замакросили?
    #38590043
Uni
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Uni
Гость
Dimitry Sibiryakov ,
Dimitry SibiryakovДолжна быть Lucida Console

Она самая и используется.


mayton , пробовал. Тот же результат - знаки вопроса. Вообще логично использовать 65001, но с UTF-8 та же беда.
...
Рейтинг: 0 / 0
Почему cout не замакросили?
    #38590044
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Uni, что у тебя показывает
Код: plaintext
1.
2.
3.
$ ver

$ mode con


?
...
Рейтинг: 0 / 0
Почему cout не замакросили?
    #38590046
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Uni,

А так?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
#include <iostream>
#include <locale>

int main()
{
    std::locale rus("rus_rus.866");
    std::wcout.imbue(rus);
    std::wcout << L"Привет, мир!!!";
    return 0;
}



Uniпочему разработчики Embarcadero не замакросили cout и wcout, дабы юзать единый cout и не париться

cout и wcout не могут быть синонимами хотя бы потому, что у них разные сигнатуры методов.
...
Рейтинг: 0 / 0
Почему cout не замакросили?
    #38590048
Uni
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Uni
Гость
mayton ,
verMicrosoft Windows [Version 6.1.7601]

mode conСостояние устройства CON:
--------------------------
Строки: 300
Столбцы: 80
Скорость клавиатуры: 31
Задержка клавиатуры: 1
Кодовая страница: 1251
...
Рейтинг: 0 / 0
Почему cout не замакросили?
    #38590053
Uni
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Uni
Гость
Anatoly Moskovsky , а так
cmdAbnormal program termination из-за imbue.
Да и способ на самом деле не очень универсален. К примеру, заменить "Привет, мир!!!" на "Привет, 双喜雙喜!!!" и приплыли...
...
Рейтинг: 0 / 0
Почему cout не замакросили?
    #38590055
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Похоже, по-любому бесперспективняк. Как я ни извращался с VC, английские буквы из
юникодной строки выводятся, русские - напрочь игнорируются. Вывод: в топку этот wcout,
WriteConsoleW - рулит.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Почему cout не замакросили?
    #38590056
Uni
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Uni
Гость
Dimitry Sibiryakov , с WinAPI все понятно. Причем постфикс W в "WriteConsoleW" использовать не надо, т.к. по умолчанию WriteConsole все равно вызовет WriteConsoleW. Но не об этом речь. А речь о том, как заюзать wcout для юникодного вывода в консоль?
...
Рейтинг: 0 / 0
Почему cout не замакросили?
    #38590058
Uni
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Uni
Гость
Да и вообще, на кой хрен этот wcout под виндой-то, если не работает нифига?
...
Рейтинг: 0 / 0
Почему cout не замакросили?
    #38590068
Uni
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Uni
Гость
Кто-нибудь может попробовать данный код на VC++?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
#include <iostream>
#include <io.h>
#include <fcntl.h>

int main() {
  _setmode(_fileno(stdout), _O_U16TEXT); // or _O_WTEXT
  std::wcout << L"&#21452;&#21916;&#38617;&#21916;!" << std::endl;
}
...
Рейтинг: 0 / 0
Почему cout не замакросили?
    #38590069
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Почему cout не замакросили?
    #38590076
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UniКто-нибудь может попробовать данный код на VC++?
Работает.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Почему cout не замакросили?
    #38590365
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UniDimitry Sibiryakov, понятно, спасибо :)

Ну раз ответа на свой изначальный вопрос я не получу, то, быть может, кто-нибудь пояснит, как работает wcout?

Пробую банальный пример:

Код: plaintext
1.
2.
3.
4.
5.
#include <iostream>
 
int main() {
  std::wcout << L"Привет!" << std::endl;
}



В консоли получаю: "??????!".

Вопросы:
1) Какая кодировка на выходе у wcout?
2) В какую кодировку надо перевести консоль, дабы лицезреть русский язык?

P.S. Интересует решение без использования locale.

man chcp
...
Рейтинг: 0 / 0
Почему cout не замакросили?
    #38590370
Uni
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Uni
Гость
Dimitry Sibiryakov , китайский выводится в консоли? А если добавить туда еще кириллицу? И какая при этом кодировка у самой консоли?
...
Рейтинг: 0 / 0
Почему cout не замакросили?
    #38590519
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Uniкитайский выводится в консоли?
Нет, я заменил твои закодированные символы на кириллицу. Но учитывая, что в экхешние они
лежат в юникоде, я делаю вывод, что вывод работает нормально. От кодовой страницы консоли
не зависит.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Почему cout не замакросили?
    #38591719
Фотография k0rvin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UniВообще логично использовать 65001, но с UTF-8 та же беда.

Да ничего логичного.
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / Почему cout не замакросили?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]