Вот мой код, который создает эту проблему;Изменения результатов программы в зависимости от использования printf
#include <stdint.h>
#define HASHPRINT(STRING) printf(STRING ": %p\n", simple_hash(STRING))
uint32_t simple_hash(const char *string) {
uint32_t hash;
char buffer[4]; /* 4 bytes = 32 bits */
const char *c;
int i = 0;
for(c=string; *c!=0; c++) {
buffer[i] = *c;
i++;
if (i == 3) {
i=0;
printf("\nAdding %u to hash\n", *((uint32_t *)buffer));
hash += *((uint32_t *)buffer);
hash = hash^*((uint32_t *)buffer);
}
}
if (i > 0) {
hash += *((uint32_t *)buffer);
hash = hash^*((uint32_t *)buffer);
}
return hash;
}
void main() {
HASHPRINT("yasar");
HASHPRINT("rasay");
HASHPRINT("arsay");
HASHPRINT("yasra");
HASHPRINT("osman");
HASHPRINT("ali");
HASHPRINT("veli");
}
выход программы изменяется в зависимости от того, если я закомментировать или нет вызова функции Printf в строке 18.
Без Printf, моя программа выводит следующее:
yasar: 7D90F834
rasay: 00000005
arsay: 00000003
yasra: 00000001
osman: 00000003
ali: 00000001
veli: 00000005
Если я включаю Printf функция, я получаю этот вывод вместо этого;
Adding 2004050297 to hash
yasar: 0F2400A0
Adding 7561586 to hash
rasay: 78C921B4
Adding 7565921 to hash
arsay: 78C94C94
Adding 7561593 to hash
yasra: 78C92194
Adding 7172975 to hash
osman: 78DD7FAC
Adding 6909025 to hash
ali: 7842A494
Adding 7103862 to hash
veli: 78C3698C
Я хотел бы ожидать, что в обоих случаях расчетные значения хеш-функции (которые печатаются после слова, разделенным от слова с :
) будет то же самое.
Я задавался вопросом, что послужило бы причиной этой проблемы.
Я использую WinXp с MinGW с версией gcc 4.8.1.