Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.04.2013, 22:31   #1
Dima-War
Форумчанин
 
Регистрация: 17.03.2012
Сообщений: 105
По умолчанию Заголовочные файлы

1. Пишу программы в Visual studio 2010. В книгах для использования различных функций, например gets(), необходимо подключать разные заголовочные файлы. В моем случае подключения iostream достаточно и все функции вроде бы как работают исправно. Нужно ли мне подключать другие заголовочные файлы, или же iostream вполне хватит?

2. И другой вопрос. Для поддержки русского языка использую setlocale(LC_ALL,"Russian"), но если получить строку с кириллицей с помощью gets() и вывести ее на экран, то буквы отображаются неправильно. Можно ли как то это исправить?
Dima-War вне форума Ответить с цитированием
Старый 11.04.2013, 03:02   #2
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Dima-War Посмотреть сообщение
1. Пишу программы в Visual studio 2010. В книгах для использования различных функций, например gets(), необходимо подключать разные заголовочные файлы. В моем случае подключения iostream достаточно и все функции вроде бы как работают исправно. Нужно ли мне подключать другие заголовочные файлы, или же iostream вполне хватит?

2. И другой вопрос. Для поддержки русского языка использую setlocale(LC_ALL,"Russian"), но если получить строку с кириллицей с помощью gets() и вывести ее на экран, то буквы отображаются неправильно. Можно ли как то это исправить?
1. Если итак исправно работает, значит итак уже все что нужно подключено.

2. Запускаем консоль, щелкаем на заголовке окна и выбираем свойства. В свойствах на закладке Шрифт ставим шрифт Lucida Console и жмем ОК.
_Bers вне форума Ответить с цитированием
Старый 11.04.2013, 07:26   #3
Dima-War
Форумчанин
 
Регистрация: 17.03.2012
Сообщений: 105
По умолчанию

Цитата:
Сообщение от _Bers Посмотреть сообщение
2. Запускаем консоль, щелкаем на заголовке окна и выбираем свойства. В свойствах на закладке Шрифт ставим шрифт Lucida Console и жмем ОК.
Поменялся только шрифт, а проблема осталась.

И хотя я уже нашел решение с помощью SetConsoleCP(1251) и SetConsoleOutputCP(1251), но тут требуется библиотека Windows.h, а значит на линукс программу не получится (если не ошибаюсь, коненчо).

Последний раз редактировалось Dima-War; 11.04.2013 в 07:37.
Dima-War вне форума Ответить с цитированием
Старый 11.04.2013, 10:43   #4
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

Начнем с того, что если вы хотите писать и под виндовс и под линукс, то вам нужен другой компилятор. Желательно тот, который есть и под виндовс и под линукс. (как вариант - gcc).

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

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс
ROD вне форума Ответить с цитированием
Старый 11.04.2013, 11:38   #5
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Dima-War Посмотреть сообщение
Поменялся только шрифт, а проблема осталась.

И хотя я уже нашел решение с помощью SetConsoleCP(1251) и SetConsoleOutputCP(1251), но тут требуется библиотека Windows.h, а значит на линукс программу не получится (если не ошибаюсь, коненчо).
Под линуксом совсем другая песня.

В ситуациях, когда хочется кросс-платформенности, люди обычно поступают тремя способами:

1. Смотрят в сторону уже готовых кросс-платформенных библиотек. Что бы не тратить время на велосипед, а по возможности использовать готовое.

2. Определяют целевые платформы и пишут кросс-платформенный код (об этом чуть ниже).

3. Если нет готовых библиотек, а самому писать хлопотно, то иногда люди думают: да ну его нафиг! И пишут код под одну самую важную платформу. А потом, если взлетит - портируют код на другие платформы. При этом, под каждую конкретную платформу код может быть сильно изменен, вплоть до замены целых подсистем.

Про кросс-платформенный код: компиляторы языка с++ определяют собственные дефайны препроцессора, по котором их можно идентифицировать. И в соответствии с компилятором, препроцессором можно подстраивать код под этот компилятор.

Например:
Код:
#ifdef __MINGW__
    #define MINGW_STUFF
#endif

#ifdef __MINGW32__
    #define MINGW_STUFF
#endif

#if defined(__GNUC__) || defined(MINGW_STUFF)
    #define GCC_COMPILER
#endif

#if (_MSC_VER)
    #define VISUAL_STUDIO
#endif
А использовать так:

Код:
#ifdef GCC_COMPILER
   //код только для компилятора гцц
#else
    #ifdef VISUAL_STUDIO
      //код для компилятора от майкрософт
    #else
      //код для всех прочих
    #endif
#endif
В твоем случае, в секцию для VISUAL_STUDIO можно воткнуть windows.h и настройку консольки под виндовс

А в секцию GCC_COMPILER - настройку под линуксы.
_Bers вне форума Ответить с цитированием
Старый 11.04.2013, 12:25   #6
Dima-War
Форумчанин
 
Регистрация: 17.03.2012
Сообщений: 105
По умолчанию

Ясно, спасибо
Dima-War вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Заголовочные файлы Dt Peleduy Qt и кроссплатформенное программирование С/С++ 0 17.10.2012 13:19
Заголовочные файлы в Си Pirr Общие вопросы C/C++ 12 18.03.2011 00:29
Заголовочные файлы legendary Общие вопросы C/C++ 1 11.09.2010 19:41
Заголовочные файлы Гром Общие вопросы C/C++ 4 31.08.2009 15:36
Заголовочные файлы. C++ Vi_King Помощь студентам 2 03.04.2008 18:47