Forum: Compiler & IDEs Cortex M Compiler der C++ Modules unterstützt


von Hans-Georg L. (h-g-l)


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.

von Oliver S. (oliverso)


Lesenswert?


von Wilhelm M. (wimalopaan)


Lesenswert?

Hans-Georg L. schrieb:
> Gibt es schon einen Compiler der C++ Modules unterstützt ?.

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

von Hans-Georg L. (h-g-l)


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.

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


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?

: Bearbeitet durch User
von Wilhelm M. (wimalopaan)


Lesenswert?

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

von Hans-Georg L. (h-g-l)


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.

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.