Extern használata
Re: Extern használata
A C++ programozási nyelv - http://skorpioo.uw.hu/docs/C_Stroustrup.pdf
Re: Extern használata
A programozás alapjai - InfoC - Budapesti Műszaki és ... https://infoc.eet.bme.hu/jegyzet/c_jegyzet.pdf
67. oldal: 21.2 A C programok általános felépítése
Még több: https://www.google.hu/search?client=ope ... 91knek+pdf
67. oldal: 21.2 A C programok általános felépítése
Még több: https://www.google.hu/search?client=ope ... 91knek+pdf
Re: Extern használata
Lehet teljesen süketséget írok és nem is ide tartozik, akkor bocsi.
Én mikor több fájlra kezdtem bontani a kódomat, azóta a fájlok elejére be kell tennem a sort és onnantól kezdve simán fordult és működik minden. Mindenki látott mindenkit. Van hogy egy netről leszedett lib is hibával fordul a még nem írogatom bele.
Egyszerűbb "libeket" írogatok magamnak a morse minta alapján.
https://www.arduino.cc/en/Hacking/LibraryTutorial
Nagyon praktikus megoldás.
Externt viszont még sosem írtam a kódomba, fordítónak ugyan eclipse arduino-t használok, ami lehet sok mindent megold helyettem.
Én mikor több fájlra kezdtem bontani a kódomat, azóta a fájlok elejére be kell tennem a
Kód: Egész kijelölése
#pragma once
Egyszerűbb "libeket" írogatok magamnak a morse minta alapján.
https://www.arduino.cc/en/Hacking/LibraryTutorial
Nagyon praktikus megoldás.
Externt viszont még sosem írtam a kódomba, fordítónak ugyan eclipse arduino-t használok, ami lehet sok mindent megold helyettem.
Re: Extern használata
Találkoztál a C szépségeivel.
Az #pragma nem szabványos fordító utasítás, ne használd. Ha szabványos C-ben meg tudod írni, az mindig jobb.
Az alap probléma: valahogy kétszer #include-olsz valamit.
A programom.h meg szerencsésen deklarációt is tartalmaz:
A preprocesszor ezt arra fordítja le, hogy:
Ezután meg pampog, hogy az alma már egyszer deklarálva lett.
Ezután beállítasz a header-ben egy tök nem szabványos direktívát: #pragma once, aminek köszönhetően a második #include el lesz dobva. Feltéve, ha olyan fordítóval dolgozol, ami az #pragma once-ot ismeri. A gcc 3.4-től támogatja, előtte nem volt ilyen.
A megoldás, a C-s matyóhímzés rendes megtanulása, amit mindenki mindig csinál, ha header fájlt hoz létre (nem gondolkodsz, matyóhímzéssel kezdesz):
Miután a __PROGRAMOM_H__ bűvészkedést megcsináltad, az #include-ot annyiszor hívod, amennyiszer jólesik, viszont csak az első esetben fog csinálni valamit.
Ezt komolyan ráolvasásként kell megtanulni. Életemben nem írtam még olyan header fájlt, amiből az #ifndef varázslat kimaradt volna. Nem kell gondolkodni, ész nélkül elmormolod a header fájlok csodaszavait és minden menni fog.
Az #pragma nem szabványos fordító utasítás, ne használd. Ha szabványos C-ben meg tudod írni, az mindig jobb.
Az alap probléma: valahogy kétszer #include-olsz valamit.
Kód: Egész kijelölése
#include "programom.h"
#include "programom.h"
Kód: Egész kijelölése
int alma = 5;
Kód: Egész kijelölése
int alma = 5;
int alma = 5;
Ezután beállítasz a header-ben egy tök nem szabványos direktívát: #pragma once, aminek köszönhetően a második #include el lesz dobva. Feltéve, ha olyan fordítóval dolgozol, ami az #pragma once-ot ismeri. A gcc 3.4-től támogatja, előtte nem volt ilyen.
A megoldás, a C-s matyóhímzés rendes megtanulása, amit mindenki mindig csinál, ha header fájlt hoz létre (nem gondolkodsz, matyóhímzéssel kezdesz):
Kód: Egész kijelölése
#ifndef __PROGRAMOM_H__ /* ha még nincs __PROGRAMOM_H__ akkor hajtsuk végre ezt az ágat */
#define __PROGRAMOM_H__ /* itt definiáljuk a __PROGRAMOM_H__-t */
int alma = 5;
#endif /* __PROGRAMOM_H__ */ /* itt ér véget a matyóhímzés */
Kód: Egész kijelölése
#include "programom.h"
#include "programom.h"
#include "programom.h"
Re: Extern használata
Efféle egysoros intéseket olvastam fórumokon is, de eddig nem állt össze mi a gond, hiányzott az a pár sor amit hozzá tettél. Annyi minden tanulni való van, hogy ha valami működik azt inkább nem bolygatom, ha nem értem teljesen.csabeszq írta:Ha szabványos C-ben meg tudod írni, az mindig jobb.
Most már értem. Köszönöm.
Legalább nem unatkozok még kijavítok mindent.
Re: Extern használata
Ha hordozható álományt akarsz, C, Cpp-hez?
Akkor még kiegészítet ezzel a feltételes fordítással:
Akkor még kiegészítet ezzel a feltételes fordítással:
Kód: Egész kijelölése
#ifndef __PROGRAMOM_H__ /* ha még nincs __PROGRAMOM_H__ akkor hajtsuk végre ezt az ágat */
#define __PROGRAMOM_H__ /* itt definiáljuk a __PROGRAMOM_H__-t */
#ifdef __cplusplus
extern "C" {
#endif
int alma = 5;
#ifdef __cplusplus
}
#endif
#endif /* __PROGRAMOM_H__ */ /* itt ér véget a matyóhímzés */
Re: Extern használata
Hordozhatósággal nem szeretnék foglalkozni, de a tapasztalat meg azt mondja, hogy ami egyszer szóba került az kelleni is fog előbb utóbb.kapu48 írta:Ha hordozható álományt akarsz, C, Cpp-hez?
Úgyhogy ezt is köszönöm.
Re: Extern használata
Az #pragma once-ról:
Egyáltalán nincs róla a neten egységes vélemény. Annyit érdemes tudni, hogy nem része a szabványnak, a fordítók nagy része viszont de facto támogatja.
Én a szabványos cuccok híve vagyok, de valahol mindenki érzi, hogy az #ifndef-es ökörködés hát nem túl szép.
Az #pragma once majdnem ugyanazt csinálja, mint az ifndef.
Amíg szabványos nem lesz, én nem fogom használni.
Egyáltalán nincs róla a neten egységes vélemény. Annyit érdemes tudni, hogy nem része a szabványnak, a fordítók nagy része viszont de facto támogatja.
Én a szabványos cuccok híve vagyok, de valahol mindenki érzi, hogy az #ifndef-es ökörködés hát nem túl szép.
Az #pragma once majdnem ugyanazt csinálja, mint az ifndef.
Amíg szabványos nem lesz, én nem fogom használni.
Re: Extern használata
Effélét tapasztaltam és is.csabeszq írta:Egyáltalán nincs róla a neten egységes vélemény.
Na de most már rendeztem soraim. Matyóhímzés pipa.