H
Widerspruch zu dem Warum: Die kurze Antwort ist Legacy-Code. Das suggeriert, wenn man schon einmal endlich C++ angefangen hat, dann nie wieder C es sei denn wegen dem Legacy-Problem. Das ist falsch wenn andererseits in der gleichen Printausgabe Sonderheft ESE auf Seite 6 C noch vor C++ als häufigste genutzte Programmiersprache angegeben wird. Der Komplettumstieg ist C++ besser? wird in letzter Zeit häufig diskutiert. Ein Argument für C ist: bei C weiß man eher was im Maschinencode abläuft was nicht unwichtig für Embedded Anwendungen, im Treiberbereich etc. ist.
Zweiter Widerspruch, bezüglich C mit dem C++-Compiler zu übersetzen: Tatsächlich ist jedoch große Sorgfalt geboten, um den Code zu „bereinigen“ . Es gibt eigentlich und faktisch nur wenige Dinge, die ein C++-Compiler nicht aus C übersetzen kann. Diese fallen beim Compilieren auf und sind meist schnell zu bereinigen. Allerdings, die Erfahrung des Autors kann aus einer anderen Ecke kommen: Legacy Code ist eben oft gewachsen und nicht immer geradlinig durchschaubar, und insbesondere für bestimmte Zielsystembedingungen geschrieben. In der Vergangenheit hatte sich bei C meist die Erfahrung breit gemacht ist doch sowieso alles speziell, also können wir ganz speziell, beispielsweise direkte Hardwarezugriffe hineinprogrammieren. Der bessere Ansatz, ich lebe ihn schon seit 25 Jahren, ist, C so zu schreiben, dass es mit verschiedenen Compilern übersetzbar ist (insbesondere mit diversen C++), auf verschiedenen Zielsystemem lauffähig ist, über Hardwarezugriffs-Subfunktionen und einer OSAL-Schicht (Operation System Adaption Layer). Man kann portablen C-Code auf dem PC (unter C++) funktional vortesteten und spart viel Zeit bei der Fehlersuche im Zielsystem.
Die beiden genannten Möglichkeiten A und B sind richtig. Beides geht. In C++ muss man die C-Routinen mit extern C definieren. Keinesfalls nicht definieren sondern einfach so aufrufen. Das öffnet aber eine ganz andere Diskussion, Style Guides für C und C++.
Jedenfalls kann man mischen und sollte auch mischen. C ist maschinennäher und an einigen Stellen besser geeignet, C++ ist übersichtlicher. C++ frei beliebig angewendet hat auch einige wesentliche Nachteile, wieder (nicht nur) eine Frage von Style Guides. Doch dies sprengt den Kommentarrahmen.
Hartmut Schorrig