#include и условная компиляция ...
Допустим у меня есть главный модуль (main.cpp) и дополнительный (misc.h).
Я в главном подключаю #include "misc.h" затем мне нужно написать ещё один модуль (my_dll.h) и в нём мне тоже кое что нужно из misc.h я там пишу #include "misc.h" и потом компилятор ругается что мол одно и тоже 2 раза пишу.
Как от этого избавиться и почему не возникает таких проблем с файлами типа #include <iostream> (их где угодно подключай сколько хочешь и никаких проблем) .... Заранее спасибо =)
в этом заголовочнике, и компил. будет подключать один раз для всех, кому он нужен
#include "misc.h"
#define MISC
#include "misc.h"
#define MISC
Ну и такой способ подойдет, только надо в условие оборачивать не include, а весь код подключаемого файла.
И такой способ более универсальный, т.к. #pragma once - это нестадартное расширение языка и поддерживается не всеми компиляторами.
#ifndef MISC
#define MISC
<source code>
#endif //MISC
#ifdef RUS
#define COUT std::wcout
#define str L"Строка"
#endif
#ifdef ENG
#define COUT std::cout
#define str "string"
#endif
...
COUT<<str<<std::endl;
потом в главное проге перед подключением этого файла писать напрмиер #define RUS или #define ENG и будет соответсвенный язык
Может есть боле удобные и легкие механизмы сделать тоже-самое ?
1) Вот это точно не круто:
2) В нормальных программах локализацию делают из ресурсов.
На этот счет выбор ресурсного файла локализации лучше настраивать билд-скриптом.
по флагу компиляции - просто проект был огромный и проще было ввести флаги где нужно чем писать билд скрипт для него.
по флагу компиляции - просто проект был огромный и проще было ввести флаги где нужно чем писать билд скрипт для него.
Как-то странно, нестыковочка - проект большой, а билд скрипта нету, или у нас разнятся понятия "билд скрипт". Для меня это все что собирает проект, чем бы это ни было - msbuild, ant, make и т.п.
был постоянно дорабатываемый проект-сборщик. Сделано там многое было коряво но делалось оно сильно до меня - команда к моему приходу работала уже с этим монстром
А где можно подробнее про билд скрипты почитать? Какая система популярнее для зазработки проектов в VS?
И, Hardcase, если можно, запость сюда какой-нить реальный пример
1) Вот это точно не круто:
А что круто ? чтобы в коде писать COUT<<someone; и COUT в зависимости от языка либо с wcout либо с cout был ?
А что тебе мешает всегда использовать wcout ?
И, Hardcase, если можно, запость сюда какой-нить реальный пример
Я не разрабатываю на C++ - бог миловал. :) Моя .NET-чик: C#/Nemerle. Для VS2005/2008/2010 родным является msbuild, хотя до VS2010 C++ был вкорячен туда отдельным тулчейном, но с приходом .NET 4.0 SDK msbuild научился собирать и C++.
#define test L"Тестирование"
#endif
#ifdef ENG
#define test "Testing"
#endif
Вот, у меня уже есть проект с 5-6 модулями и главным модулем с main ? где что подключать надо, чтобы во всех файлах, где я поменял символьные константы на дефайны из этого файла, небыло проблем и где прописывать #define RUS или ENG (ну я так понимаю в модуле с main перед инклюдом этого файла локализации) ... подскажите истиный путь ..
{
std::string test(L"Тестирование");
}
else
{
std::string test("Testing");
}
{
std::string test(L"Тестирование");
}
else
{
std::string test("Testing");
}
А может, просто, взять книжку либо погуглить и разобраться, чем wcuot обличается от cout, чем L"" отличается от "".
Ведь вопросы то задаешь глупые, которые решить можно без форума в течении 5-10 минут.
В твоем понимании wcout - это объект работы с русским текстом? :)
Ну так и что тебе мешает работать только wchar (wcout и т.д.) ?
Жалко памяти? :)
А ты посчитал на сколько увеличится расход памяти?
В процентах от всей используемой программой памяти?
Не занимайся никчемной оптимизацией.
#include <ostream>
#include <string>
#include <cstdlib>
using namespace std;
int main()
{
//setlocale(LC_ALL, "");
wcout<<L"Еманарот народ."<<endl;
wstring wstr;
wchar_t str[20];
getline(wcin, wstr);
wcout<<wstr;
std::system("pause");
return 0;
}
Либо я чего то не понимаю, либо это действительно не так просто, как кажется.
P.S. Если не ставить локаль, то русские буквы вообще не выводятся, а если ставить то с wstr траблы.