2014-04-30 11 views
9

Czy istnieje sposób na wyłączenie funkcji C++ 11 podczas pisania kodu w 2013 roku, chcę, aby mój kod był również kompilowany na starszych kompilacjach, takich jak vs2008.wyłącza funkcje C++ 11 w vs2013

ja zmęczony, aby zmienić poprzez: projektu-> Właściwości> General-> platformy zestawu narzędzi i zmień "Visual Studio 2013 (V120)" coś starszego, ale jest to jedyna rzecz, jaką w menu rozwijane tam.

+0

Dlaczego nie po prostu nie używać żadnych C++ 11 (lub nowsze) funkcje? –

+7

im nowy do C++, nie mogę powiedzieć dla każdej funkcji, jeśli jest to funkcja C++ 11. – user3066442

+1

Następnie mogę polecić [dobrą stronę referencyjną] (http://en.cppreference.com/w/cpp)? Pokazuje wyraźnie, jakie funkcje i klasy oraz funkcje to C++ 03, C++ 11 lub C++ 14. Najlepiej jednak użyć starszej wersji (bez obsługi C++ 11 lub wyższej), aby skompilować swój program. –

Odpowiedz

6

Jeśli masz zainstalowane inne wersje Visual Studio, możesz wybrać starszy zestaw narzędzi. To może trochę pomóc.

Lepszym rozwiązaniem, IMHO, jest utworzenie ciągłego serwera integracyjnego, który buduje kod dla wszystkich obsługiwanych kompilatorów, konfiguracji i platform. Otrzymasz wtedy kompilacje, gdy tylko zrobisz coś, co nie jest obsługiwane. Idealnie serwer CI uruchamia wszystkie testy jednostkowe, aby sprawdzić, czy któreś z twoich konfiguracji przerwał twoje testy.

+0

Zainstalowałem VS 2008 ramię w ramię z vs 2013 i wiem, że mogę wybrać vs2008 z rozwijanego menu. to pomogło – user3066442

0

Użyj kompilatora, który pozwala na jawne ustawienie używanego standardu (Clang i GCC pozwalają wybrać wersję standardową) lub zapoznaj się ze zmianami w C++ 11, aby uniknąć ich w kodzie.

Jeśli potrzebujesz referencji: http://en.cppreference.com/w/ Strony wyraźnie pokazują, w której wersji standardowej została wprowadzona określona funkcja.

+11

Łatwo pomyłkowo użyć funkcji C++ 11 podczas próby napisania kodu C++ 03. Na przykład std :: vector w C++ 03 wymaga, aby elementy były [Copy-Assignable] (http://en.cppreference.com/w/cpp/concept/CopyAssignable) i [Copy-Constructable] (http: //en.cppreference.com/w/cpp/concept/CopyConstructible), a C++ 11 usuwa te ograniczenia. Dlatego w niektórych przypadkach powiedzenie "unikaj funkcji C++ 11" jest tak samo bezużyteczne, jak stwierdzenie "unikaj pisywania błędów". – JDiMatteo

8

Nie możesz.

Niestety, nie można wyłączyć funkcji C++ 11 i przejść na C++ 03 lub C++ 98 w Visual Studio. Możesz zobaczyć, jakie funkcje należą do C++ 11 here i here, staraj się ich nie używać.

Jednak lepszym wyborem jest użycie starszych wersji VS, aby upewnić się, że nie używasz żadnej nowej funkcji.

Osobiście używam MinGW/GCC w Windows i mogę wyłączyć C++ 11 przy użyciu przełącznika kompilatora -std=c++03, -std=c++98 lub nie używając -std=c++11.

0

Skonfiguruj Visual Studio do użycia innego kompilatora, który nie obsługuje funkcji C++ 11. Intellisense jeszcze pokaże C++ 11 funkcji, ale można złapać problemy na lokalnym kompilacji przed sprawdzeniem go w

How to use GCC with Microsoft Visual Studio?

1

Visual Studio 2015 Update 3 wprowadza dwa nowe przełączniki (/ std. 14 C++ i/std: C++ latest) w celu uzyskania kontroli nad wersją języka programowania C++, który ma być używany w projektach. W tej aktualizacji, jeśli określisz wersję językową, która nie jest żadną z tych, kompilator zignoruje przełącznik (z ostrzeżeniem) i domyślnie C++ 14.

zobaczyć https://blogs.msdn.microsoft.com/vcblog/2016/06/07/standards-version-switches-in-the-compiler/