Re: Tajemná zákoutí jazyka C.

Miroslav Mraz mrazik na volny.cz
Pátek Leden 8 12:17:26 CET 2016


Není tomu tak. Ty závorky (*foo) tam mají svůj význam (jako např. u 
ukazatele na funkci) i když moc nechápu jaký. V případě, že je odstraním 
nastane chyba

test.c:14:11: error: incompatible types when assigning to type ‘char 
*[20]’ from type ‘char (*)[20]’
    ps->foo = & pole;     // Tohle je pro mne nečitelné

Ale s tou délkou v paměti budete asi mít pravdu. Nicméně už mi to hraje, 
bylo potřeba vyházet dynamickou alokaci pro tyhle struktury, ta tam byla 
dost zbytečně, protože to alokuje jen na začátku a na konci se to zase 
uvolní.
Takže MP3 přehrávač na STM32F4 jako čistě softwarová záležitost je 
zvládnutelný, malé demo už mám, zatím hraju jen z interní flashky s 
pevným formátem audio, hraje to bez lupání, přiměřeně ke kvalitě kodeku 
a vstupního formátu.
Na webu se dá najít demo, ale není tam popsáno jak do toho dostat 
vlastní melodii. A zřejmě se tomu človíčkovi taky dělaly problémy s 
alokací paměti, protože si napsal vlastní alokátor. Tak jsem si pohrál a 
jsem rád, že úspěšně.

Mrazík


Dne 8.1.2016 v 11:21 Jiří Nesvačil napsal(a):
> Rekl bych, ze toto se rozlozi:
> struct strange {
>    char (*foo) [FOOLEN]; // Proč ???
> };
>
> struct strange {
>    char *foo [FOOLEN];
> };
>
> Dale pak skoro ekvivaletne
> struct strange {
>    char **foo;
> };
>
> Ta definice delky muze souviset s definici v pameti. Pokud kompiler nevi
> jak to je dlouhe, tak se z toho nedaji delat tabulky, ale implementuje
> se to jako pole odkazu. Kdyz tomu dam delku, tak by to kompiler mohl
> delat jako tabulku s jasne danym rozmerem a ne jako pole pointeru.
>
> Jirka
>
>


Další informace o konferenci Hw-list