FSF::sprintf/sscanf/snprintf

Разработка Far.
User avatar
zg
zero-gravity
Posts: 6016
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

FSF::sprintf/sscanf/snprintf

Post by zg »

на первый взгляд функции хорошие и полезные. но есть одно но. реализация использует аналоги из rtl. соответственно могут различаться поддерживаемые форматы. и один и тот же бинарник плагина может работать по разному с по разному собранным фаром.
нужно ли нам такое поведение или стоит удалить данные функции из апи?
User avatar
Centaur
Posts: 1083
Joined: Tue 05 Apr, 2005 20:09
Location: Novosibirsk, Russia
Been thanked: 2 times

Re: FSF::sprintf/sscanf/snprintf

Post by Centaur »

Как вариант, можно написать в документации, что гарантируется только то, что прописано в стандарте C, а Microsoft-specific расширения на ваш страх и риск.
Maximus5
Posts: 3295
Joined: Sun 11 Nov, 2007 02:03
Been thanked: 10 times
Contact:

Re: FSF::sprintf/sscanf/snprintf

Post by Maximus5 »

imho, удалять не нужно
User avatar
zg
zero-gravity
Posts: 6016
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: FSF::sprintf/sscanf/snprintf

Post by zg »

Centaur wrote:Как вариант, можно написать в документации, что гарантируется только то, что прописано в стандарте C, а Microsoft-specific расширения на ваш страх и риск.
а что, свежий вижуал %lld поддерживает? даже если да, то msvcrt, используемый в mingw — нет.
2useven10
Posts: 5210
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 310 times

Re: FSF::sprintf/sscanf/snprintf

Post by 2useven10 »

%lld поддерживает?
vc 10.0 - да, mingw gcc 4.6.1 - да.
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Re: FSF::sprintf/sscanf/snprintf

Post by Shmuel »

zg wrote:а что, свежий вижуал %lld поддерживает? даже если да, то msvcrt, используемый в mingw — нет.
Насколько я понимаю, %lld поддерживается всеми компиляторами последних лет. Но результат выполнения будет зависеть от msvcrt.dll, установленной на системе.

Только что собрал простейший тест - 32-битный EXE, печатающий число 0x1234567812345678LL в формате %lld. На Windows XP SP3 он напечатал младшие 32 бита, а на Windows 7 - всё число. Тот же самый 32-битный экзешник.
2useven10
Posts: 5210
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 310 times

Re: FSF::sprintf/sscanf/snprintf

Post by 2useven10 »

Shmuel
Похоже Вы правы. Я проверял на win7 x64. Сейчас проверил на xp - отрезает.
Причем win7-32 - ok, xp-64 только 32 бита....
Upd: Если точнее: vc приложение везде ок.
gcc приложение на win7,Vista - ок, на xp - усечение. От разрядности ос и приложения не зависит.
User avatar
zg
zero-gravity
Posts: 6016
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: FSF::sprintf/sscanf/snprintf

Post by zg »

всё ещё хуже чем я думал.
2useven10 wrote:Upd: Если точнее: vc приложение везде ок.
gcc приложение на win7,Vista - ок, на xp - усечение. От разрядности ос и приложения не зависит.
ну gcc использует msvcrt.dll. это, как я понимаю, vc6. и если собирать vc6, а может и чуть более поздними, то на xp/2003 ll будет игнорироваться.
2useven10
Posts: 5210
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 310 times

Re: FSF::sprintf/sscanf/snprintf

Post by 2useven10 »

zg wrote:всё ещё хуже чем я думал.
Ну "%I64d" везде работает...
User avatar
zg
zero-gravity
Posts: 6016
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: FSF::sprintf/sscanf/snprintf

Post by zg »

2useven10 wrote:Ну "%I64d" везде работает...
когда-то фар собирался борландом. там не работало. чем будет собираться фар завтра и будет ли там нестандартный i64 — неизвестно.
User avatar
zg
zero-gravity
Posts: 6016
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: FSF::sprintf/sscanf/snprintf

Post by zg »

собрал я фар gcc отсюда и оказалось, что FSF.sprintf начал хотеть на %s — char*. внезапно.
2useven10
Posts: 5210
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 310 times

Re: FSF::sprintf/sscanf/snprintf

Post by 2useven10 »

wchar_t ws[200];
_snwprintf(ws, sizeof(ws)/sizeof(ws[0]), L"%s\n", L"wtext");

компилится и работает без проблем, сборка gcc та же самая.
add: как и _vsnwprintf, swprintf, vswprintf ...
User avatar
zg
zero-gravity
Posts: 6016
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: FSF::sprintf/sscanf/snprintf

Post by zg »

2useven10 wrote:wchar_t ws[200];
_snwprintf(ws, sizeof(ws)/sizeof(ws[0]), L"%s\n", L"wtext");

компилится и работает без проблем, сборка gcc та же самая.
add: как и _vsnwprintf, swprintf, vswprintf ...
FSF.sprintf(buffer,L"%s",L"test") даёт в buffer "t". чяднт?
User avatar
zg
zero-gravity
Posts: 6016
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: FSF::sprintf/sscanf/snprintf

Post by zg »

тестовый плагин. везде печатает test. на фаре собранном gcc 4.7.0 по ссылке выше: t. x86.
Attachments
testprintf.7z
(2.63 KiB) Downloaded 159 times
2useven10
Posts: 5210
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 310 times

Re: FSF::sprintf/sscanf/snprintf

Post by 2useven10 »

x3 - с плагином у меня результат аналогичный...
Post Reply

Return to “Development”