Zacatecnicke dotazy v C

Zuffa Jan ZuffaJ na cgc.sk
Pátek Prosinec 18 11:11:16 CET 2015


Ja sa snazim vyhybat sa aj tomu #ifndef a v celku sa mi dari.
Ak som to musel niekedy pouzit tak jedine neoptimalnym
rozlozenim informacii v hlavickovych suboroch.
Ale tym nechcem povedat ze je zle to pouzivat.

j.

From: Hw-list [mailto:hw-list-bounces na list.hw.cz] On Behalf Of František Burian
Sent: Friday, December 18, 2015 11:02 AM
To: HW-news
Subject: Re: Zacatecnicke dotazy v C

Dobry den,

  U Pascalu mate ten hlavickovy soubor taky, jen je umisteny na zacatku toho pascaloveho souboru, kde mate ty deklarace ktere nize v souboru popisete. Holt si zvyknete ze pro C je potreba tohle rozdelit na dva soubory.

No a proc mit hlavicky ? Predstavte si pripad. Mate 3 moduly, A,B,C. V modulu A vyuzivate funkci z B, v b zC, v C z A ... at budete ceckove soubory includovat v jakemkoliv poradi, porad to bude rvat ze neco neni definovano. Pokud z toho udelate tri jednotky ke kompilaci a udelate korektne tri hlavickove soubory, bude vam vse chodit bez problemu, linker se postara o spravne volani vzajemnych modulu.

Kdyby vas napadlo dat tu hlavicku do C souboru, a napriklad A i B vyuziva C, a v obou includnete C, a v mainu includnete A,B i C muzou nastat dve veci, budto nekonecny cyklus vzajemneho includovani, nebo opetovna deklarace toho sameho. Oboji kompilator zarizne s chybou - to je mimochodem duvod, mit v hlavickovem souboru minimum informaci (zadny kod) a podmineny text #ifndef xx #define xx ... hlavicka .. #endif konec souboru

S pozdravem,

 Burian


---------- Původní zpráva ----------
Od: Pavel Kutina <hw na prelude.cz>
Komu: HW-news <hw-list na list.hw.cz>
Datum: 18. 12. 2015 10:43:46
Předmět: Re: Zacatecnicke dotazy v C

Priznam se, ze jsem ostuda ostudna a web arduina jsem prochazel jen zbezne a
v mistech, ktere jsem akutne potreboval. Tohle mi uniklo, ted uz je jasne,
ze asi bude lepsi v projektu udrzovat poradek...

A co se tyka prdeni v divadle - tam si dokazu celkem predstavit, proc bych
to nemel delat, pripadne co to pozitivniho ci negativniho mne (nebo okoli)
prinese. Ale proc neincludovat .c netusim - konkretne treba soubor s fonty
obsahuje celkem jedno velke pole a to je vsechno, to k nemu mam delat
hlavicku a tu includovat? Co s kusy kodu, u kterych nechci, aby mi prekazely
v aktualnim souboru? U Pascalu to bylo celkem jednoduche - co je hotove, ven
s tim do dalsiho souboru, ten nainkludovat. Proc je to v C spatne?
Mimochodem, ten "#include fonts.c" jsem "zdedil" spolu s knihovnou pro
ovladani TFT, tu jsem sice kompletne prepsal (takze jsem praci s
displejem -za cenu drobnych kompromisu, jako je treba nesnadna
prenositelnost- zrychlil zhruba tricetinasobne), ale ten include uz tam
zustal.

Jinak pouzivani .h je dalsi bod na mem soukromem seznamu k vyjasneni (dobre,
u knihoven si funkci vysvetlim celkem snadno), jak koukam, u C je potreba k
programovani i nejaka ta literarni zajmova cinnost, tak si holt budu
nasledujicich ctrnact dnu pred spanim cist misto Vondrusky nejakeho
Ritchieho :)

Pavel Kutina



----- Original Message -----
From: "Milan B." <milan na bastl.sk<mailto:milan na bastl.sk>>
To: <hw-list na list.hw.cz<mailto:hw-list na list.hw.cz>>
Sent: Friday, December 18, 2015 2:02 AM
Subject: Re: Zacatecnicke dotazy v C


On 18. 12. 2015 1:23, Pavel Kutina wrote:
> Diky za obsahle shrnuti.
>
> Bod a) jsem otestoval a funguje, vyhovuje, citelnost textu se vyrazne
> zlepsila (tedy ve srovnani se zapisem po charu, knizku bych takhle
> zapisovat nechtel) - kdyz takhle napisete duvod, proc se to tak chova,
> prestane to byt magie a dava to smysl.
>
> Bod b) - ono to Arduinovske IDE ma "uzasnou"" vlastnost, ze pri startu
> otevre vsechny soubor .ino, .c a .h, ktere najde v adresari projektu. I
> kdyz se nikde v textove podobe nejaky vzajemny include nevyskytuje, zrejme
> staci, ze o nem vi editor a linkeru uz ho predhodi spravne. Smysl mi to
> nedava, ale chova se to tak...
>

Ale ved sa to chova tak, ako je to popisane:
https://www.arduino.cc/en/Hacking/BuildProcess

<cite>
When your sketch is compiled, all tabs with no extension are
concatenated together to form the "main sketch file". Tabs with .c or
.cpp extensions are compiled separately. To use tabs with a .h
extension, you need to #include it (using "double quotes" not <angle
brackets>).
</cite>

Takze otvori vsetky subory pri starte a potom zo vsetkych otvorenych
zlepi vysledok....

Mimochodom, toto nerobte:
#include <xxx.c>
a
#include "xxx.c"

inkludovat *.c alebo *.cpp je nieco ako prdet v divadle.

-m-

> Co se tyka dalsich nejasnosti, tak nejvic mne ted aktualne trapily tyhle
> tri zminene, zbytek se urcite casem objevi, jen si je ted nevybavim.
>
> Jeste jednou diky.
>
> Pavel Kutina

_______________________________________________
HW-list mailing list - sponsored by www.HW.cz<http://www.HW.cz>
Hw-list na list.hw.cz<mailto:Hw-list na list.hw.cz>
http://list.hw.cz/mailman/listinfo/hw-list

_______________________________________________
HW-list mailing list - sponsored by www.HW.cz<http://www.HW.cz>
Hw-list na list.hw.cz<mailto:Hw-list na list.hw.cz>
http://list.hw.cz/mailman/listinfo/hw-list
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20151218/02f92aff/attachment.html>


Další informace o konferenci Hw-list