Forum: Compiler & IDEs Compiler-flag abhängiges #include


von Regler (Gast)


Lesenswert?

Ich verwende ein Compilerflag

--combine -fwhole-program

welches neben dem Einbinden externer header auch das Einbinden externer 
c-Files mit #include erfordert, wenn man nicht alles in eine Datei 
kopieren möchte.

Gibts es Möglichkeiten, das flag per #ifdef abzufragen?

Oder anders gefragt, wie realisiert man einen modularen und trotzdem 
immer kompilierbaren Programmaufbau, wenn man dieses Flag nur eventuell 
verwendet, ohne ständiges Editieren? Gar nicht?

Wäre zwar nicht soo schlimm, falls nicht. Erfordert dann halt ein paar 
Kommentare mehr. Wollte nur mal wissen ob sowas überhaupt geht. Man 
könnte so auch falsche Einstellungen der Compiler-Flags abfangen und per 
#error darauf hinweisen.

: Verschoben durch Moderator
von Simulant (Gast)


Lesenswert?

mach halt ein zweites C-File, das NUR aus includes besteht.

Ohne Flag kompilierst du wie bisher, Mit dagegen nur das neue File.

von Stefan E. (sternst)


Lesenswert?

Regler schrieb:
> Ich verwende ein Compilerflag
>
> --combine -fwhole-program

Also wohl gcc, oder?

> welches neben dem Einbinden externer header auch das Einbinden externer
> c-Files mit #include erfordert, wenn man nicht alles in eine Datei
> kopieren möchte.

Nein. Du kannst auch einfach alle C-Files in der Kommandozeile angeben. 
Wozu hast du sonst das --combine mit drin? Bei deiner Lösung (per 
#include oder nur eine C-Datei) brauchst du es doch gar nicht.

von Regler (Gast)


Lesenswert?

Simulant schrieb:
> mach halt ein zweites C-File, das NUR aus includes besteht.
>
> Ohne Flag kompilierst du wie bisher, Mit dagegen nur das neue File.

Eine Möglichkeit an die ich auch schon dachte. Elegant finde ich es 
trotzdem nicht. Da setze ich doch lieber im Quellcode ein paar 
Kommentare.

Stefan Ernst schrieb:
> Bei deiner Lösung (per
> #include oder nur eine C-Datei) brauchst du es doch gar nicht.

Erstmal: Kenne mich mit Kompilerflags und deren Nutzung nicht so gut 
aus, da ich mich erst seit kurzem damit beschäftige(n muss).

--combine hat nichts mit -fwhole-program zu tun?

von Regler (Gast)


Lesenswert?

Ach ja: AVR-GCC

von Stefan E. (sternst)


Lesenswert?

Regler schrieb:

> --combine hat nichts mit -fwhole-program zu tun?

Nein, davon abgesehen, dass man sie häufig zusammen benutzt.

gcc --combine a.c b.c
bedeutet nichts anderes, als "nimm die beiden C-Dateien und jage sie 
zusammen durch den Compiler, so als ob es nur eine C-Datei wäre".

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Stefan Ernst schrieb:
> bedeutet nichts anderes, als "nimm die beiden C-Dateien und jage sie
> zusammen durch den Compiler, so als ob es nur eine C-Datei wäre".

Jein.  Nur hinsichtlich interner Analysen (also bezüglich der
Optimierungsstragie).  Hinsichtlich der Sprach-Syntax bleiben es zwei
getrennte Übersetzungseinheiten (translation units), d. h. für
"static" haben sie beide nach wie vor jeweils ihren eigenen
Namensraum.  (Das wäre übrigens auch der wesentliche Unterschied zum
#include der C-Dateien ineinander, dort wäre alles zusammen nur eine
Übersetzungseinheit.)

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.