Organisation Quelltextdateien: Static functions

OP #5923271
Lesenswert?
• ▲
▼
Guten Morgen,

eigentlich sollte ich diese Frage schon vor lange Zeit geklärt haben, 
aber bislang gab es nach gründlicher Betrachtung nie einen Anlaß, von 
den beiden klassischen *.c und *.h-Dateien abzuweichen.

In einem "großen" C Projekt sind (grob) in den *.c-Dateien Quelltexte, 
die Speicherplatz belegen, in *.h Dateien Quelltexte, die keinen 
belegen.

"static inline"-Funktionen sind in den Headerdateien, weil sie von 
mehreren *.c-Dateien includiert werden (können), und der Speicherplatz 
wird ja auch der aufrufenden Funktion zugeschlagen. So paßt das.

Jetzt habe ich einen Haufen kleiner statischer Funktionen (nicht inline- 
das soll der Compiler/Linker selbst entscheiden), die von genau einer 
Funktion aufgerufen werden. Logisch gehörten sie in die Quelltextdatei 
ebenjener Funktion. Allerdings geht in der schieren Menge dieser 
"Kleinfunktion" die Hauptfunktion unter. Also gehörten sie in eine 
separate Datei. *.c-Datei paßt nicht, weil ich dem Compiler die 
Möglichkeit zum Inlinen nicht nehmen will. *.h-Datei paßt nicht, weil 
sie nur von einer einzigen *.c-Datei includiert werden sollen.

Wie geht ihr bei dieser Klasse von Funktionen vor?
Moderator #5923455
Lesenswert?
• ▲
▼
Früher habe ich in Fällen wie dem von dir beschriebenen einen Teil der
Quellcodedatei in eine zweite .c-Datei ausgelagert und diese per
#include eingebunden. Dabei war ich mir nie ganz sicher, ob ich der
includierte Datei die Extension .c, .h oder .irgendwasanderes geben
sollte. Schließlich habe ich mich für das .c entschieden, aber auch .h
wäre IMHO in Ordnung.

Heute, im Zeitalter verbesserter Navigationsfunktionen in Editoren und
IDEs mach ich das höchstens noch bei automatisch generierten .c-Dateien.
Gast #5923474
Lesenswert?
• ▲
▼
Walter T. schrieb:
> Das habe ich ja. Dadurch ist immer viel Scrollarbeit zwischen der
> funktionsreichen Hauptfunktion und den Kopfzeilen nötig, weil die vielen
> funktionsarmen Mini-Funktionen dazwischenliegen.

Dann benutzt Du keinen, oder einen unzureichenden Editor.

Seit 20 Jahren (CW als Referenz) bieten alle Windows-Editoren Ansichten, 
in denen z.B. die Funktionen aufgelistet werden. Alternativ kannst Du 
z.B. oben eine Sprungmarke zu den "Hauptfunktionen" einbauen (z.B. 
einfach den Namen hinschreiben und mit einem Click "suchen", auch das 
bieten alle Editoren. Oder Du hast ein Trennungszeichen, dass der Editor 
per default faltet, oder oder oder.

Notepad ist kein Editor.
Persönliche Seite #5923505
Lesenswert?
• ▲
▼
Walter T. schrieb:
> Das habe ich ja. Dadurch ist immer viel Scrollarbeit zwischen der
> funktionsreichen Hauptfunktion und den Kopfzeilen nötig, weil die vielen
> funktionsarmen Mini-Funktionen dazwischenliegen.

Wenn die Hauptfunktion vor den "funktionsarmen Mini-Funktionen" liegt, 
wie soll dann viel Scrollarbeit nötig sein?
1
// Header-kommentar
2

3
#include-orgie
4

5
... lokale prototypen
6

7
"Hauptfunktion"
8

9
... statische "funktionsarme Minifunktionen"
#5923574
Lesenswert?
• ▲
▼
Für Module, die aufgrund der Größe/Komplexität aus mehreren .c-Files 
bestehen habe ich oft einen "private-Header".
Da kommt alles an Information rein was in jedem der .c-Files gebraucht 
wird, aber nicht Teil des öffentlichen Interfaces sein soll (z.B. 
interne Datenstrukturen in denen der User nicht rumpfuschen soll).

In so einem Header könntest du sowas theoretisch unterbringen.
Wichtig: diesen Header nicht im public-Header inkludieren.
#5924996
Lesenswert?
• ▲
▼
Walter T. schrieb:
> Wie geht ihr bei dieser Klasse von Funktionen vor?

Funktionen die nur von einer Sourcedatei benötigt werden in die 
entsprechende Sourcedatei, alles andere klassisch mit Source- und 
Headerdateien (die auch privat, also modulintern, sein können). Dabei 
deklariere ich Funktionen, so klein sie auch sein mögen, nie als inline, 
bis ein Profiler mir dessen Notwendigkeit beweist. Ich mag es, wenn 
Deklaration und Definition strikt voneinander getrennt sind, aber das 
ist Geschmacksache.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren