Compiler-flag abhängiges #include

Gast #1938051
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.
#1938065
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.
Gast #1938082
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?
Moderator Persönliche Seite #1938154
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.)

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