8

Otrzymuję kod źródłowy C++ od programisty, który kompiluje się przy użyciu Visual Studio 2010, które następnie muszę przekompilować pod różnymi różnymi kompilatorami: GCC, LLVM, inne wersje Visual Studio, itp. Czasami kod, który on mi wysyła (to kompiluje bez ostrzeżeń w VS2010) nie kompiluje się pod innymi kompilatorami.Czy są ustawienia kompilatora w Visual Studio 2010, aby zapewnić pisanie przenośnego C++?

Czy są jakieś ustawienia kompilatora, które może ustawić w VS2010, aby zwiększyć prawdopodobieństwo, że jego kod będzie czysto przenośny?

+3

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

+2

To jest jedno podejście. Innym sposobem byłoby skłonienie go do skompilowania wszystkiego za pomocą g ++ oprócz VS. – NPE

+0

@roger Dzięki, to dokładnie to, czego szukałem. – Rich

Odpowiedz

3

Na poziomie językowym nie ma srebrnej kuli. Najlepsze, co możesz zrobić, to trzymać się jak najdokładniej języka. Większość kompilatorów ma opcje wydawania ostrzeżeń lub błędów, jeśli korzystasz z rozszerzenia, które jest specyficzne dla konkretnego kompilatora (w przypadku Visual C++, /Za wyłączymy niestandardowe rozszerzenia językowe). Nie jest to jednak doskonałe, ponieważ żaden kompilator nie implementuje w pełni 100% standardu, więc nadal możesz mieć problemy z przenośnością, nawet w przypadku ściśle zgodnego kodu.

Należy również pamiętać, że wiele codziennych kodów faktycznie korzysta z rozszerzeń lub niezdefiniowanych lub zdefiniowanych przez kompilator zachowań, często nie zdając sobie z tego sprawy, więc może nie być praktyczne kompilowanie w trybie zgodnym z normami.

Należy również pamiętać o tym, że standardy pozwalają na inne podejście. Na przykład typy takie jak int mogą mieć różne rozmiary na różnych systemach. Windows to LLP64, a większość systemów opartych na Uniksie to LP64.

Na poziomie systemowym nie znam idealnego sposobu, aby programista nie polegał na czymś zależnym od systemu (np. <windows.h> lub <pthreads.h>).

Najlepszym rozwiązaniem jest ułatwienie wszystkim programistom uruchamiania testów na wszystkich platformach docelowych.