Stdafx И Classes; Ansi И Utf-8 Rus

Тема в разделе "MS Visual C++", создана пользователем Vadik(R), 1 апр 2014.

  1. Vadik(R)

    Vadik(R) Well-Known Member

    Регистрация:
    12 дек 2007
    Сообщения:
    483
    Симпатии:
    0
    Доброго времени суток, уважаемые форумчане.
    Не хочу плодить две темы, так как думаю, ответы на мои вопросы будут довольно просты, а вопросов у меня к вам два.

    Первый - это использование локали и кодировки файла.
    Почему, если я пишу:
    Код (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
     
  2. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    http://habrahabr.ru/post/104417/
    такая локаль: ru_RU:UTF-8», «en_US.UTF-8»

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

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

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

    Vadik(R) Well-Known Member

    Регистрация:
    12 дек 2007
    Сообщения:
    483
    Симпатии:
    0
    С stdafx решил вроде проблему. В stdafx.h написал все возможные свои инклюды, а в оставшиеся свои файлы подключил только stdafx.h. Ну и в своих хедарах на всякий случай поставил include guard'ов :)

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

    barbarian New Member

    Регистрация:
    11 апр 2008
    Сообщения:
    4
    Симпатии:
    0
    Описание stdafx.h от MS:
    // stdafx.h: включите файл для добавления стандартных системных файлов или конкретных файлов проектов, часто используемых, но редко изменяемых

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

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

    a0z Well-Known Member

    Регистрация:
    15 мар 2011
    Сообщения:
    109
    Симпатии:
    0
    Нет, его идея в включении только редко изменяемых хидеров. Файлы проекта обычно ими не являются и включаться в stdafx.h не должны.
    Впрочем нарушение этого правила приведет только к замедлению компиляции.
     
Загрузка...
Похожие Темы - Stdafx Classes Ansi
  1. Serduko
    Ответов:
    0
    Просмотров:
    1.275

Поделиться этой страницей