Ausführen von code vor main()
In Objekt-orientierten Sprachen (C++) können Sie code ausführen, bevor main()
durch die Verwendung eines global-Objekt oder eine Klasse statische Objekte und Ihre Konstruktoren führen Sie den code, den Sie möchten.
Gibt es eine Möglichkeit in C? Ich habe keine spezifischen problem, das ich zu lösen versuche, ich bin einfach nur neugierig. Eine Sache, dies könnte nützlich sein, wird automatisch die Initialisierung einer Bibliothek.
- stackoverflow.com/questions/949890/...
- Die Frage, die Sie sich beziehen ist spezifisch für Arduino-Umgebung. Trotzdem, Antworten kann es hilfreich sein.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es Möglichkeiten, mit
__attribute__
diese sind aber sehr spezifisch für Ihre compiler und code, die geschrieben werden, diese sind nicht wirklich tragbar. Auf der anderen Seite, die C-Sprache bietet keine start-up-Module/Bibliotheken.In C, logisch
main()
ist die erste Funktion, die aufgerufen wird durch das OS. Aber vor dem Aufrufmain()
, das OS ruft eine andere Funktion aufgerufenstart-up
- Modul, um das setup mehrere Umgebungsvariablen initialisieren (un-initialisiert) die statische Variablen, den Aufbau eines stack-Rahmens (activation record) und initialisiert den stack-pointer zum Beginn des stack-Bereich und weitere Aufgaben, die durchgeführt werden müssen, um Sie vor dem Aufrufmain()
.Sagen, wenn Sie das schreiben von code für embedded-Systeme, wo es keine-oder-minimal OS zu tun, die oben genannten arbeiten, dann sollten Sie erkunden diese Optionen, die compiler-abhängig. Andere als GCC, Turbo-C und Microsoft C-Compiler bietet Einrichtungen zum hinzufügen von code in einer bestimmten hardware-Maschine (f.e. 8086-Maschinen).
In anderen Worten, der start-up-Module sind nicht dazu gedacht, für die Programmierer.
main
ist nicht die erste Funktion, die aufgerufen wird durch das OS. Haben Sie gehört der crt0?_start
wird immer aufgerufen, bevormain
, und in WindowsWinMain
aufgerufen wird, bevormain
auch.Können Sie es mit
__attribute__ ((constructor))
. Getestet hab ich das folgende Beispiel mit den beidengcc
undclang
. , Die being said, es ist nicht Teil der Sprache.Geschieht Folgendes:
GCC Dokumente bei: https://gcc.gnu.org/onlinedocs/gcc-8.3.0/gcc/Common-Function-Attributes.html#Common-Function-Attributes
Mit gcc, können Sie dies tun, indem Sie den Konstruktor, Attribut, z.B.
Dies ruft foo vor der main.
Hinweis: Dies ist wahrscheinlich nicht portabel zu anderen Compilern.
Können Sie initialisieren Sie Globale Variablen, aber keine Funktionen aufrufen, die in diese Initialisierungen.
Nicht in jedem Standard-konformen Weg, aber Sie sollten untersuchen, was wirklich passiert, wenn Ihr Betriebssystem geladen wird das binäre Bild und ruft die Anwendung die main-Funktion!
Gibt es tragbare Arten von Funktionen spezifizieren, die ausgeführt werden können "nach" main " ausgeführt.
atexit()
at_quick_exit()
Weiter, Folgen Sie diese link und über verschiedene Arten der Initialisierung in C++ - das mag für Sie nützlich sein, um code auszuführen, bevor main() aufgerufen wird.