Code: Select all
╔═ F:\...ugin\Col0host\ver_c0 ═14:27
║n Name │ ║
║.. │ ║
║far.exe │[x32] 2.0.0.1591 ║
║ver_c0.dll │[x32] ║
║ver_c0_x64.dll │[x64] ║
Code: Select all
╔═ F:\...ugin\Col0host\ver_c0 ═14:27
║n Name │ ║
║.. │ ║
║far.exe │[x32] 2.0.0.1591 ║
║ver_c0.dll │[x32] ║
║ver_c0_x64.dll │[x64] ║
вот он гуманитарный подход во всей красеMaximus5 wrote:пересобрано в VC, добален бинарник для x64
(собранный в gcc валился на 64битных dll)
спешить увеличивать энтропию вселенной, это конечно очень важно.Maximus5 wrote:Да, ты знаешь, почему-то проще (или быстрее) выложить рабочую сборку, чем разбираться в глюках gcc.
да.Наверное ты делаешь по другому?
может. а может у тебя в коде баг. и сборка другим компилятором просто маскирует его?Может в gcc какие-то хидеры неправильные, это я буду разбираться.
я называю этот подход несколько иначе. «гуманитарный» — гуманное обозначение для этого форума.Если ты это называешь гуманитарным подходом - то я скорее гуманным.
Code: Select all
#include <windows.h>
#include <stdio.h>
int __cdecl main()
{
printf("sizeof(IMAGE_NT_HEADERS64)=%i\n", sizeof(IMAGE_NT_HEADERS64));
printf("sizeof(IMAGE_FILE_HEADER)=%i\n", sizeof(IMAGE_FILE_HEADER));
printf("sizeof(IMAGE_OPTIONAL_HEADER64)=%i\n", sizeof(IMAGE_OPTIONAL_HEADER64));
return 0;
}
Потому что это - плохая программа. Для функций семейства printf компилятор не обязан проверять (и чаще всего - не проверяет) соответствие типов между шаблонами и аргументами - это ответственность программиста. Не проверяется и соответствие числа шаблонов числу аргументов.Maximus5 wrote:Почему вот эта программа, собранная для x86,
[...]
выдает различные результаты
Code: Select all
printf("%i %i %i %i", 5);
То, что Вы пишете про printf, правда; то, что про эту программку — нет.Shmuel wrote:Потому что это - плохая программа. Для функций семейства printf компилятор не обязан
К сожалению, Вы не аргументируете, придётся мне:HaRT wrote:То, что Вы пишете про printf, правда; то, что про эту программку — нет.Shmuel wrote:Потому что это - плохая программа. Для функций семейства printf компилятор не обязан
Некогда сейчас искать стандарт - вот первая попавшаяся ссылка.Whether the result of sizeof is unsigned int or unsigned long is implementation defined.
Стандарт 2003-его года на C++ гласит “The result is a constant of type size_t.” (5.3.3.6). Т.е. результат действительно запросто может оказаться больше, чем int. Т.о. в продукт такой код и впрямь плох. А вот для быстрого эксперимента — что мы собственно тут и наблюдаем — вполне.Shmuel wrote:Некогда сейчас искать стандарт - вот первая попавшаяся ссылка.