das thema ist schon etwas älter, aber trotzdem...
bei 64bit / 32bit muss man beim programmieren immer aufpassen. es gibt z.b. unterschiedliche int's (uint32_t, uint64_t), was dann bei funktionen wie printf() zu problemen führen kann (z.B. "%016lX" vs. "%016llX" für long). und selbst da muss man dann nochmals aufpassen, weil das bei MS wieder anders ist (da wäre es dann "%016I64X"... fragt mich nicht, weshalb).
ein beispiel, wie so eine config dann aussieht, wenn man für die unterschiedlichen compiler und zielplattformen (jetzt nicht nur amd64 und x86) unterscheiden will, sieht so aus (
ACE wrappers 5.6.6):
http://github.com/mangos/mangos/blob/mas…e/Basic_Types.h
wenn man nicht aufpasst, kann es dann zu solchen fehlern führen:
http://github.com/mangos/mangos/commit/8…adbefd069e3fdc9
ich hatte dort "%u" verwendet, was auf 32bit systemen auch funktionierte. aber auf 64bit systemen hat es dann natürlich nur die ersten 4 bit genommen, was dazu führte, dass dort immer 0 stand. nach einer änderung auf UI64FMTD (was bei ACE definiert ist und je nach plattform "%u", "%lu" oder "%llu" ist) hat das ganze dann funktioniert.
von daher: immer auf allen plattformen testen, wenn ihr was macht
(
und vorallem auch mit unterschiedlichen compilern...)