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) kann nicht unter den anderen Compilern kompiliert werden.Gibt es Compilereinstellungen in Visual Studio 2010, um das Schreiben von portierbarem C++ zu gewährleisten?

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

+3

http://stackoverflow.com/questions/5060034/vs2010-c-and-c-enforce-ansi-compliance-for-linux-gcc-compatibility –

+2

Das ist ein Ansatz. Ein anderer wäre, ihn dazu zu bringen, alles mit g ++ zusätzlich zu VS zu kompilieren. – NPE

+0

@roger Danke, das ist ziemlich genau das, was ich gesucht habe. – Rich

Antwort

3

Auf dem Sprachniveau 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 Erweiterung verwenden, die für einen bestimmten Compiler spezifisch ist (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 immer noch Probleme mit der Portabilität haben, selbst mit streng konformem Code.

Auch beachten Sie, dass viele alltägliche Code tatsächlich nutzt Erweiterungen oder undefined oder Compiler-definierten Verhaltensweisen, oft ohne es zu merken, so dass es nicht praktisch sein könnte, 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 der System-Ebene, ich kenne keine perfekte Möglichkeit, um sicherzustellen, dass ein Programmierer nicht auf etwas System-spezifische (z. B. <windows.h> oder <pthreads.h>) angewiesen ist.

Sie sollten es allen Entwicklern erleichtern, Test-Builds auf allen Zielplattformen auszuführen.