>> unsigned char* DisplayData = "FUCKK" > meta įspėjimą "pointer targets in intitialization differ in signedness". Tada reikia tiesiog "char", nes tokios defaultiškai yra tekstinės konstantos. Atitinkamai ir "WriteByteToDisplay(char)" -- abejočiau, ar taip jau būtinas unsigned jos viduje. Taip, yra įprasta tekstą laikyti signed. Galbūt nuo tų laikų, kada tekstui per akis pakako 7 bitų. Skirtumas nuo char DisplayData[5] = {'F', 'U', 'C', 'K', 'K'}; yra tame, kad pirmu atveju kompiliatorius už nurodytų simbolių įdės '\0'. Gaunasi tipiškas ASCIIZ stringas, kuriame nulis rodo teksto pabaigą. Taigi aprašant nebereikia susiskaičiuoti, kiek simbolių planuoji sukišti, ir perdavinėti to skaičiaus tolyn. Aišku, gyvenimą kažkiek palengvins visokie "sizeof(DisplayData)" vietoje "5", bet visvien neįsivaizduoju, kada tekstui šitoks principas apsimokėtų labiau už ASCIIZ. Labai praverčia po kompiliavimo pasižiūrėti, koks realus atminties planas. Bet pakankamai adekvačiai, kiek atsimenu, šitai rodydavo nebent TASM ir MASM savo listinguose. gcc -Wa,-ahls=myfile.lst atrodo nekaip: 2 .section .rodata 3 .LC0: 4 0000 75736167 .string "usage: datefmt <UNIX date>" 4 653A2064 4 61746566 4 6D74203C 4 554E4958 5 001b 00 .align 4 6 .LC1: 7 001c 25303464 .string "%04d.%02d.%02d %02d:%02d:%02d\n" 7 2E253032 7 642E2530 7 32642025 7 3032643A 8 .text Kažkur pradingsta tolimesni stringo baitai, rodo 20 vietoje 27. Iš -Wl,-Map=myfile.map naudos dar mažiau. Savo ruožtu objdump -s myfile.o rodo viską iš karto, bet nebėra pradžios adresų: Contents of section .rodata: 0000 75736167 653a2064 61746566 6d74203c usage: datefmt < 0010 554e4958 20646174 653e0000 25303464 UNIX date>..%04d 0020 2e253032 642e2530 32642025 3032643a .%02d.%02d %02d: 0030 25303264 3a253032 640a00 %02d:%02d.. -- saimhe