Cortex M Compiler der C++ Modules unterstützt

OP #7386512
Lesenswert?

Ich verwende im Moment : gcc-arm-none-eabi-10-2020-q4-major.

Gibt es schon einen Compiler der C++ Modules unterstützt ?.

Hintergrund ist ich habe Header mit Templates, die evtl. CMSIS Files includen und möchte keine Konflikte mit den #defines haben. Mit Namespace funktioniert das nicht sollte aber mit Modules kein Problem sein und auch die compile Zeit verkürzen.

OP #7386561
Lesenswert?

Wilhelm M. schrieb:

Hans-Georg L. schrieb:

Gibt es schon einen Compiler der C++ Modules unterstützt ?.

aktueller gcc: -std=c++20 -fmodules-ts

Beim gcc habe ich gelesen das es da noch Probleme mit intern/extern Linkage geben soll. Ist das Geschichte oder noch aktuell ? Wenn das noch zu unausgereift ist lasse ich es lieber bleiben. Ich brauche ja nicht so viel von den CMSIS Headern und ein Programm zu schreiben das mir das aus den svd Files direkt zieht ist ja auch nicht die Welt. Einen Reader dafür habe ich mir ja schon geschrieben.

Mal sehen ob ich die 12er gcc Version native für Windows bekomme.

(Firma: Schweigstill IT) Persönliche Seite #7386670
Lesenswert?

Also meine gemischten Projekte (C, C++) lassen sich mit GCC 10 einwandfrei für STM32 kompilieren und funktionieren auch einwandfrei. Wichtig ist nur, dass C-Header durch C++-Quellen wie folgt inkludiert werden:

1
extern "C" {
2
  #include "mein_c_header.h"
3
}

Irgendwelche Probleme bei der Kompilierung gemischter Projekte sind nun wirklich uralter Schnee von gestern und nicht mehr aktuell. Oder geht es mal wieder nur darum, eine uralte Sichtweise aufrechtzuerhalten?

OP #7386709
Lesenswert?

Wilhelm M. schrieb:

Ich denke, er meint, dass der CPP Textersatz durchführt an Stellen, wo dies nicht gewünscht ist, weil CPP-Macros keinen Scope haben.

Richtig, der C-Präprozessor läuft vor dem Compiler, damit schleppst du dir alle Macros ein. Deshalb funktionieren auch Namespaces nicht, die kennt erst der Compiler. C++ Modules sind eine Art Erweiterung von Pre compiled Header und man kann gezielt nur das exportieren (sichtbar machen) was man möchte.
Ein Module durchläuft nicht mehr den Präprozessor.

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