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.
http://stackoverflow.com/questions/5060034/vs2010-c-and-c-enforce-ansi-compliance-for-linux-gcc-compatibility –
To jest jedno podejście. Innym sposobem byłoby skłonienie go do skompilowania wszystkiego za pomocą g ++ oprócz VS. – NPE
@roger Dzięki, to dokładnie to, czego szukałem. – Rich