Tema: Re: C: masyvo elementu perdavimas funkcijai
Autorius: saimhe
Data: 2011-03-01 16:51:55
>> 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