Ha a C++ szabvány szerint minden C++ program forráskódjában szerepelnie kell main függvénynek, akkor ez azt jelenti, hogy az arduino C++ nem szabványos?
Használ main-t a C++.
Azzal kezdődik.
int main(void)
{
itt van a setup, a loop és miegyebek.
}
Így áll össze. Csak, hogy ez rejtve van. Szóval Te magában a main-ben dolgozol. ;).
Nem kell, hogy tartalmazzon.
A C(++) annyit köt ki, hogy a main függvény a program belépési pontja. Nem írja elő, hogy kell ilyennek lenni. Az ehhez hasonló laza szabályok miatt is annyira erős a C++. Ha a programozó tudja, mit szeretne, akkor a nyelv nem állja útját, hogy megtegye. Arduino esetén pedig nem beszélhetünk klasszikus értelemben vett belépési pontról. Pontosabban: két belépési pont van, a setup, és a loop. A setup az, amelyik leginkább hasonlít a main-re, ugyanis az fut le, amikor a program elindul. A loop pedig egy eseményvezérelt belépési pont, az aktiváló eseménye pedig a setup, vagy maga a loop befejeződése.
Zárójeles megjegyzés: az Arduino forrásban nincs #include <Arduino.h>, mégis remekül lefut. Mint ahogy misztikus, rejtett main függvény sincs. Ne keverjük össze az előre megírt függvénykönyvtárakkal, amik tényleg tartalmaznak előre megírt kódot, külön függvényekben. De nem fognak képzeletben odatenni egy int main(void)-ot. ;)
"
From what I understand, the Arduino IDE does use main(), it's just hidden. The actual code it generates is something like this:
int main(void)
{
init();
setup();
for (;;) { loop(); }
return 0;
}
"
Ebből nekem az jön le, hogy maga az AVR-re (ha erről beszélünk) portolt fordító generál egy ilyen kódot a háttérben.
..Na igen, ezt konkrétan az Arduino IDE csinálja, nem is a fordító.
"The most basic of arduino sketches contains definitions for two functions, setup and loop. To be able to actually compile that, the IDE adds an #include header at the top and a main function at the bottom of the file. This is generally a neat idea, but it’s done on a copy of the file, which means that any compilation errors will be detected in the copy, and not the original one."
(A "Step 1" résznél.)
Elvileg megkerülhető ezzel:
1) #undef main // removes the existing main from the compilers memory
2) call init(); as first step in main()
A lényeg, hogy igen, van benne main().
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!