Gibt es Compilereinstellungen in Visual Studio 2010, um das Schreiben von portierbarem C ++ zu gewährleisten?

8

Ich erhalte C ++ - Quellcode von einem Entwickler, der mit Visual Studio 2010 kompiliert, den ich dann unter verschiedenen Compilern neu kompilieren muss: GCC, LLVM, andere Versionen von Visual Studio, usw. Manchmal der Code, den er mir sendet ( das Kompilieren ohne Warnungen in VS2010) kompiliert nicht unter den anderen Compilern.

Gibt es Compilereinstellungen, die er in VS2010 einstellen kann, um die Wahrscheinlichkeit zu erhöhen, dass sein Code sauber portierbar ist?

    
Rich 15.03.2013, 15:43
quelle

1 Antwort

3

Auf der Sprachebene gibt es keine Wunderwaffe. Das Beste, was Sie tun können, ist, so nah wie möglich am Sprachstandard zu bleiben. Die meisten Compiler verfügen über Optionen zum Ausgeben von Warnungen oder Fehlern, wenn Sie eine für einen bestimmten Compiler spezifische Erweiterung nutzen (mit Visual C ++ deaktiviert /Za nicht standardmäßige Spracherweiterungen). Aber das ist nicht perfekt, da kein Compiler noch 100% des Standards implementiert, so dass Sie auch mit streng konformem Code Probleme mit der Portabilität haben.

Seien Sie sich auch bewusst, dass viele alltägliche Codes tatsächlich Erweiterungen oder nicht definiertes oder Compiler-definiertes Verhalten nutzen, oft ohne es zu merken. Daher ist es möglicherweise nicht praktisch, in einem vollständig standardkonformen Modus zu kompilieren.

Sie müssen sich auch der Dinge bewusst sein, die die Standards erlauben, anders zu sein. Zum Beispiel können Typen wie int unterschiedliche Größen auf verschiedenen Systemen haben. Windows ist LLP64, während die meisten Unix-abgeleiteten Betriebssysteme LP64 sind.

Auf Systemebene weiß ich nicht, wie man perfekt sicherstellen kann, dass ein Programmierer sich nicht auf etwas Systemspezifisches verlässt (z. B. <windows.h> oder <pthreads.h> ).

Am besten machen Sie es allen Entwicklern einfach, Test-Builds auf allen Zielplattformen auszuführen.

    
Adrian McCarthy 15.03.2013, 17:02
quelle