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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.