2017-11-14 1 views
1

Ich frage mich, ob es möglich wäre Link-Zeit-Optimierung (lto) für Programme, bestehend aus einer TU mit C++ Code einige Funktionen in einer TU mit C aufrufen Code. Also, gibt es eine Möglichkeit, die C-Funktion inline in das resultierende Programm zu bekommen?Link-Zeit Optimierung (lto) für gemischte C++/C-Programme

Der wirkliche Anwendungsfall ist eine Mikrocontroller-Firmware in C++ geschrieben. Aber es gibt Teile des Codes, die wegen der C-Semantik in C geschrieben werden müssen (z. B. Zugriff auf das nicht aktive Union-Element).

(Das hat nichts mit manueller Kennzeichnung Funktionen wie Inline zu tun)

+0

Mögliches Duplikat [Linkzeit-Optimierung und Inline] (https://stackoverflow.com/questions/7046547/ link-time-optimization-and-inline) –

+0

Ich frage mich, welche Modi des Union-Zugriffs in C gut definiert sind, aber in C++ unmöglich oder undefiniert sind. –

+0

Typ-Punning über den Zugriff auf das nicht aktive Member wird explizit in C, aber UB in C++ unterstützt. – wimalopaan

Antwort

4

Dies sollte kein Problem sein. Sowohl in GCC als auch in Clang arbeitet die Link-Time-Optimierung mit einer Zwischenrepräsentation des Codes. Das heißt, indem Sie -flto verwenden, erstellen Sie Objektdateien mit zusätzlichen LTO-Informationen (gcc) oder LLVM-Bytecode (Clang), wodurch die Quellsprache nicht mehr wichtig ist.

Einige gehen so weit wie noch weniger mit C++ zu mischen und D dennoch LTO verwenden: http://johanengelen.github.io/ldc/2016/11/10/Link-Time-Optimization-LDC.html

+0

Nur überprüft, dass mit einem Avr-Backend. Das einzige, was man hier vermisst, ist Constexpr. – wimalopaan

Verwandte Themen