Stdafx И Classes; Ansi И Utf-8 Rus

Vadik(R)

Well-known member
12.12.2007
469
0
#1
Доброго времени суток, уважаемые форумчане.
Не хочу плодить две темы, так как думаю, ответы на мои вопросы будут довольно просты, а вопросов у меня к вам два.

Первый - это использование локали и кодировки файла.
Почему, если я пишу:
C++:
setlocale(LC_ALL, "Rus");
cout << "Привет, мир!" << endl;
То текст выведется русскими буквами, если он находится в файле исходного кода с кодировкой ANSI и выведет "Р?С?РёР?РчС', Р?РёС?!", если этот файл будет в кодировке UTF-8 (без BOM). В настройках проекта указано использовать кодировку Unicode.
Собственно, хотелось бы узнать, как можно сделать так, чтобы и исходный код был в файлах с кодировкой UTF-8, и русский язык выводился на консоль нормально?
Надеюсь, это как-то просто решается...

И второй вопрос, это использование в проекте stdafx. Я не знаю, для чего он нужен (там какие-то прекомпилированные заголовки чтоль), меня контесты сразу приучили создавать "пустой проект", но тут у меня просят помощи, так как какому-то преподавателю этот stdafx в проекте стал принципиален. Так вот, с простыми проектами, состоящими из одного файла, с stdafx проблем не было, запускались. А вот появился проектик, состоящий из main.cpp, и двух файликов с классами - вот его собрать и в правильной последовательности - никак не получается, довольно много способов уже перепробовал, но вижуалка всегда ругается. Собственно, прошу помощи собрать этот проект или подсказать, как стоит его собрать, и обнаружить причину его "несборки".

Чтобы уж вообще не думали, что я пришёл за готовыми ответами, прекрепляю архив с проектами.
TestANSIUTF - проект к первому вопросу, для удобства, в одном файле функцию можно назвать main, тогда в другом файле - main1
TestNoStdafx - рабочий проект с классами
TestStdafx - проект, который должен инклюдить дополнительно stdafx, с чем у меня сложности

Заранее спасибо, надеюсь, поможете :( Посмотреть вложение Projects.rar
 

Вложения

R

rrrFer

#2
http://habrahabr.ru/post/104417/
такая локаль: ru_RU:UTF-8», «en_US.UTF-8»

но под win работать не будет.

С stdafx я чето проблем не помню. У меня винды нет не говоря о всяких там ущербных студиях.

Если очень нужно - опиши структура проекта (какой файл куда включается), можно нарисовать. И сообщения с ошибками прикрепи.
 

Vadik(R)

Well-known member
12.12.2007
469
0
#3
С stdafx решил вроде проблему. В stdafx.h написал все возможные свои инклюды, а в оставшиеся свои файлы подключил только stdafx.h. Ну и в своих хедарах на всякий случай поставил include guard'ов :)

А на первую проблему забил, решил, что пусть просто будет кодировка у исходников ANSI, либо использовать английский язык ^_^
 

barbarian

New member
11.04.2008
4
0
#4
Описание stdafx.h от MS:
// stdafx.h: включите файл для добавления стандартных системных файлов или конкретных файлов проектов, часто используемых, но редко изменяемых

Вобщем идея этого файла во включении в него всех необходимых проекту хидеров, как системных так и Вашего проекта, так сказать "все в одном месте", а затем подключение его во все *cpp.
Незнаю почему, но у меня работает не совсем так как задумано MS, приходится в каждом *cpp кроме него подключать еще и хидеры классов реализованных в данном *cpp.

зы include guard'ов (или #pragma once) у меня вообще как закон, после того как, лет десять назад, полтора месяца не могли понять почему проект перестает компилироватся после добавления 512-го класса!! Думали у студии какое-то ограничение, уж больно число знакомое... Оказалось просто в одном из хидеров небыло include guard, а 512 просто роковое совпадение.
 

a0z

Well-known member
15.03.2011
108
0
#5
Описание stdafx.h от MS:
// stdafx.h: включите файл для добавления стандартных системных файлов или конкретных файлов проектов, часто используемых, но редко изменяемых

Вобщем идея этого файла во включении в него всех необходимых проекту хидеров, как системных так и Вашего проекта, так сказать "все в одном месте", а затем подключение его во все *cpp.
Нет, его идея в включении только редко изменяемых хидеров. Файлы проекта обычно ими не являются и включаться в stdafx.h не должны.
Впрочем нарушение этого правила приведет только к замедлению компиляции.