Forum: Compiler & IDEs AVR-Studio: Funktionen in eigene C-Sheets auslagern


von Nils (Gast)


Lesenswert?

Hallo,
ich probiere im Moment mit dem AVR-Studio rum und habe aktuell das ganze 
Programm in der main.c-Datei untergebracht.
Das ist aber leider mit zunehmender Programmgröße ziemlich 
unübersichtlich geworden.
Deshalb sollen wenn möglich einzelne Funktionsblöcke auf eigene C-Sheets 
(nennt man die so) ausgelagert werden.


Nehmen wir z.B. an, in der main-Funktion befindet sich die Funktion 
schaltautomatismus_a(), die in ein externes Sheet ausgelagert werden 
soll und nur volatile Variablen enthält, die bereits deklariert wurden.

Könnte man jetzt einfach im Projektordner eine Datei 
schaltautomatismus_a.c erstellen, sie mit #include 
"schaltautomatismus_a.c" einbinden und die Funktion dann komplett in 
diese neue C-Datei rüberkopieren und sie dann anschließend ganz normal 
aus der Hauptschleife der main-Funktion aufrufen?

von Rolf M. (rmagnus)


Lesenswert?

Nils schrieb:
> Deshalb sollen wenn möglich einzelne Funktionsblöcke auf eigene C-Sheets
> (nennt man die so) ausgelagert werden.

Ich habe diesen Begriff in meinen ca. 25 Jahren C-Programmierung noch 
nie gehört.

> Nehmen wir z.B. an, in der main-Funktion befindet sich die Funktion
> schaltautomatismus_a(), die in ein externes Sheet ausgelagert werden
> soll und nur volatile Variablen enthält, die bereits deklariert wurden.

Diese Beschreibung bekomme ich nicht geparst. Funktionen können keine 
anderen Funktionen enthalten, und was meinst du damit, dass die Funktion 
"nur volatile Variablen enthält, die bereits deklariert wurden"? Enthält 
sie nun die Variablen, oder kommen die von wo anders? Sind da wirklich 
nur Variablen drin? Was soll die Funktion dann?

> Könnte man jetzt einfach im Projektordner eine Datei
> schaltautomatismus_a.c erstellen, sie mit #include
> "schaltautomatismus_a.c" einbinden und die Funktion dann komplett in
> diese neue C-Datei rüberkopieren und sie dann anschließend ganz normal
> aus der Hauptschleife der main-Funktion aufrufen?

Wenn du Funktionen in eine eigene Datei auslagern willst, kannst du das 
bei kleinen Programmen theoretisch so machen. Allerdings ist das nicht 
der übliche Weg. Stattdessen fügt man eine weitere Datei 
"schaltautomatismus_a.h" dazu, in der die Funktion forward-deklariert 
wird. Diese wird dann per #include in beiden .c-Dateien eingebunden. 
Dann werden die beiden .c-Dateien getrennt von einander compilert und 
das Ergebnis dann zusammengelinkt.

: Bearbeitet durch User
von Adam P. (adamap)


Lesenswert?

Nils schrieb:
> Könnte man jetzt einfach im Projektordner eine Datei
> schaltautomatismus_a.c erstellen, sie mit #include
> "schaltautomatismus_a.c" einbinden

Ja, aber nutz dafür *.h Dateien als "Interface".
https://www.geeksforgeeks.org/c-c-include-directive-with-examples/

oder du hast einen guten Grund es so zu machen, z.B.:
https://stackoverflow.com/questions/232693/including-one-c-source-file-in-another

von Nils (Gast)


Lesenswert?

Prima, vielen Dank für die Anregungen.

Die h.-Datei ist dann wohl das richtige.

von Johannes S. (Gast)


Lesenswert?

Der richtige Begriff wäre nicht sheet sondern 'Übersetzungseinheit' oder 
in englisch 'compilation unit'. Damit findet man auch Beschreibungen zur 
Anwendung:
http://userpage.fu-berlin.de/~ram/pub/pub_jf47ht81Ht/c_getrennte_uebersetzung_de

Dürfte auch in jedem C Einsteigerbuch erklärt sein.

von Oliver S. (oliverso)


Lesenswert?

Johannes S. schrieb:
> Der richtige Begriff wäre nicht sheet sondern
> 'Übersetzungseinheit' oder
> in englisch 'compilation unit'.

Etwas weniger schwülstig wäre „Datei“ oder „File“.

Oliver

von Rolf M. (rmagnus)


Lesenswert?

Oliver S. schrieb:
> Johannes S. schrieb:
>> Der richtige Begriff wäre nicht sheet sondern
>> 'Übersetzungseinheit' oder
>> in englisch 'compilation unit'.
>
> Etwas weniger schwülstig wäre „Datei“ oder „File“.

Das ist aber etwas anderes.

von MaWin (Gast)


Lesenswert?

Johannes S. schrieb:
> Der richtige Begriff wäre nicht sheet sondern 'Übersetzungseinheit' oder
> in englisch 'compilation unit

Einfach nur Datei.

C-Datei.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.