Zacatecnicke dotazy v C
Pavel Kutina
hw na prelude.cz
Čtvrtek Prosinec 17 22:26:16 CET 2015
Zdravim,
mozna me ukamenujete a mozna odkazete do prisusnych adres, ale mel bych par
nejasnosti v uplnych zakladech C, tak jestli nekdo muzete a budete mit tu
trpelivost... Pro poradek (hraje-li to roli, asi ano) uvadim, ze pisu v
Energii (Arduino pro TI MSP a Stellaris, vcetne toho dementniho editoru).
//--------------------------------------
a) jak na zapis retezce nejak inteligentne? Potrebuju textove menu na
displeji, texty mam v tomto tvaru:
char mnu[][17] =
{
{'P' ,'r' ,'v' ,'n' ,0xED },
{'D' ,'r' ,'u' ,'h' ,0xE1 },
}
Ten hex je samozrejme znak s diakritikou, pri primem zapisu ho prekladac
preklada jako unicode a k dalsimu zpracovani podhodi dvojznak, neumim ho to
odnaucit. Je to pouzitelne, ale cokoliv, nez par pismen se timhle zpusobem
pise hodne pitome.
Pokud jsem pouzil zapis
char* mnu[] = {
"Prvn\xED",
"Druh\xE1",
};
tak to bylo vcelku OK, i -dejme tomu- pouzitelne a citelne v editoru. Hacek
nastal v okamziku, kdy po takhle zapsanem znaku v retezci nasledovalo
pismeno "e" - prekladac to pochopil jako unicode znak a ten s tou
diakritikou plus to nasledujici "e" prelozil jako jeden (a zmrsil). Netusite
nekdo, jak to obejit?
//--------------------------------------
b) jak funguje extern promenne? Mam vedle projektu odlozeny fonty ve
fonts.c, v nem v podstate jen:
const uint8_t simpleFont[][8] =
{
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 0x00
{0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x00, 0x00, 0x00}, // 1
...
Kdesi v jednom header u jedne z knihoven je
extern uint8_t simpleFont[][8];
OK, funguje to - ale z ceho se linker dozvedel, kde tu promennou hedat?
Obsah se nacita spravne, ale samotny fonts.c nemam nikde inkludovany, jen
lezi ve stejnem adresari - to to fakt prolejza vsechny soubory v adresari,
co kdyby tam ta deklarace nahodou nekde byla?
//--------------------------------------
c) asi jsem uplne nepochopil include, resp. rozdil mezi
#include <xxx.c>
a
#include "xxx.c"
Chapu dobre, ze pri pouziti hranatych zavorek prekladac hleda prislusne
soubory nekde v definovanych mistech (nejake search paths, libraries atd.),
kdezto s uvozovkami zacina prohledavat od aktualniho adresare?
//--------------------------------------
Mam samozrejme asi tak pet set dalsich drobnych nejasnosti, ale jednak se
snazim googlit, druhak opisovat, ale nektere veci jsou tak obecne, ze ani to
googleni k rozumnym vysledkum nevede. Hodne pomaha Herout, ale k tomu mi
zase chybi druhy dil :)
Jako obvykle koncim mail provolanim "Zlaty Pascal!" (ostatne soudim, ze
Kartago...), ale je pravda, ze syntaxe C se mi zacina libit cim dal vic a
hodne ocenuju #define, to mi v Pascalu posledni dobou znacne chybi - to
provolani uz neni tak hlasite, jako byvalo... Ale zase ta prace s retezci...
Diky za kazde navedeni spravnym smerem.
Pavel Kutina
Další informace o konferenci Hw-list