Здравствуйте, shura_mam, Вы писали:
_>static const char* s_szProgVer = "Program version 1.0"; _>но так, чтобы препроцессор сам формировал строку "1.0" исходя из PROG_VER_MAJOR и PROG_VER_MINOR.
Здравствуйте, Павел Кузнецов, Вы писали:
ПК>Здравствуйте, shura_mam, Вы писали:
_>>static const char* s_szProgVer = "Program version 1.0"; _>>но так, чтобы препроцессор сам формировал строку "1.0" исходя из PROG_VER_MAJOR и PROG_VER_MINOR.
ПК>
Здравствуйте, Павел Кузнецов, Вы писали:
ПК>Здравствуйте, shura_mam, Вы писали:
_>>static const char* s_szProgVer = "Program version 1.0"; _>>но так, чтобы препроцессор сам формировал строку "1.0" исходя из PROG_VER_MAJOR и PROG_VER_MINOR.
ПК>
Здравствуйте, shura_mam, Вы писали:
_>Всем привет!
_>Есть в h файле _>#define PROG_VER_MAJOR 1 _>#define PROG_VER_MINOR 0 _>хочется получить в C/CPP файле строку вида _>static const char* s_szProgVer = "Program version 1.0"; _>но так, чтобы препроцессор сам формировал строку "1.0" исходя из PROG_VER_MAJOR и PROG_VER_MINOR.
#define PROG_VER_MAJOR 1
#define PROG_VER_MINOR 0
#define _version(x,y) "Program version "#x"."#y
#define version(x,y) _version(x,y)
static const char* s = version(PROG_VER_MAJOR,PROG_VER_MINOR);
_>Еще раз спасибо за помощь с препроцессором. _>Но у меня возник еще один вопрос: _>Моя программа пишет в лог дату компиляции файла:
_>printf( "This programm was compiled on "__DATE__"\n" );
_>Однако как заставить препроцессор сгенерить UNICODE строку?
_>wprintf( L"This programm was compiled on "__DATE__"\n" ); _>error C2308: concatenating mismatched wide strings
_>Такой же вопрос по поводу макроса __FILE__. _>Существет ли его UNICODE вариант?
Из MSDN
//You can create your own wide string version of __FILE__ as follows:#include <stdio.h>
#define WIDEN2(x) L ## x
#define WIDEN(x) WIDEN2(x)
#define __WFILE__ WIDEN(__FILE__)
wchar_t *pwsz = __WFILE__;
Здравствуйте, GarryIV, Вы писали:
GIV>Здравствуйте, shura_mam, Вы писали:
_>>Еще раз спасибо за помощь с препроцессором. _>>Но у меня возник еще один вопрос: _>>Моя программа пишет в лог дату компиляции файла:
_>>printf( "This programm was compiled on "__DATE__"\n" );
_>>Однако как заставить препроцессор сгенерить UNICODE строку?
_>>wprintf( L"This programm was compiled on "__DATE__"\n" ); _>>error C2308: concatenating mismatched wide strings
_>>Такой же вопрос по поводу макроса __FILE__. _>>Существет ли его UNICODE вариант?
GIV>Из MSDN
GIV>
GIV>//You can create your own wide string version of __FILE__ as follows:
GIV>#include <stdio.h>
GIV>#define WIDEN2(x) L ## x
GIV>#define WIDEN(x) WIDEN2(x)
GIV>#define __WFILE__ WIDEN(__FILE__)
GIV>wchar_t *pwsz = __WFILE__;
GIV>
А можно без ###. Достаточно просто # (приведение к строке). Ведь между кусками строкового литерала ("версия" "1" "." "0") можно вставлять сколько угодно пробелов, поэтому дополнительная склейка (##) не нужна.
V>Какая есть особая необходимость именно в макроопределениях?
Просто это нужно для библиотеки, одна из функций которой возвращает свою версию в виде DWORD.
Строку версии библиотека пишет в свой лог. Зачем делать лишние преобразования в runtime, если эта строка уже известна на стадии компиляции?