Megosztás a következőn keresztül:


/std (Standard nyelvi verzió megadása)

A C vagy C++ nyelvi szabvány megadott verziójából engedélyezze a támogatott C és C++ nyelvi funkciókat.

Szintaxis

/std:c++14
/std:c++17
/std:c++20
/std:c++23preview
/std:c++latest
/std:c11
/std:c17
/std:clatest

Megjegyzések

A /std lehetőségek a Visual Studio 2017-ben és újabb verzióiban érhetők el. A kód összeállítása során engedélyezett verzióspecifikus ISO C vagy C++ programozási nyelvi standard funkciók szabályozására szolgálnak. A beállításokkal letilthatja bizonyos új nyelvi és kódtár-funkciók támogatását: azokat, amelyek megszakíthatják a meglévő kódot, amelyek megfelelnek a nyelvi szabvány egy adott verziójának.

A Visual Studio 2017-ben és újabb verzióiban a Microsoft C++ fordító nem támogatja a C++ szabvány módokat a C++14-nél korábbi (/std:c++14). Ilyen támogatás nem tervezett. Tökéletlen áthidaló megoldásként olyan régebbi Visual C++ fordítóeszközöket is használhat, amelyek nem implementálták a későbbi szabványok funkcióit. A régebbi fordítóeszközök Visual Studióban való telepítésével és használatával kapcsolatos további információkért tekintse meg A Visual Studióban a natív többcélú célzás használata régi projektek.

C++ szabványok támogatása

Észleli, hogy a /std beállítás érvényben van-e a _MSVC_LANG előfeldolgozó makróval rendelkező C++ fordítás során. További információ: Előfeldolgozó makrók.

Fontos

Mivel néhány meglévő kód a 199711Lmakró __cplusplus értékétől függ, az MSVC fordító csak akkor módosítja a makró értékét, ha a /Zc:__cplusplusbeállítást választja. Adja meg a /Zc:__cplusplus és a /std beállítást a megfelelő értékre __cplusplus beállításához.

/std:c++14

Engedélyezi az MSVC fordító által implementált C++14 szabványspecifikus funkciókat. Ez a beállítás a C++-ként lefordított kód alapértelmezett beállítása. A Visual Studio 2015 3. frissítésétől kezdve érhető el.

Ez a beállítás letiltja a fordító és a standard kódtár támogatását a nyelvi szabvány újabb verzióiban módosított vagy új funkciók esetében. Ez azonban nem tiltja le az MSVC fordító korábbi kiadásaiban már implementált C++17 funkciókat. További információ: Microsoft C/C++ nyelvi megfelelőség. A táblák jelzik, hogy mely C++17 funkciók engedélyezettek /std:c++14megadásakor.

A következő funkciók továbbra is engedélyezve maradnak, ha a /std:c++14 beállítás meg van adva, hogy elkerülje a Visual Studio 2015 2. frissítésében vagy azt megelőzően elérhető funkcióktól függőséget kérő felhasználók kompatibilitástörő változásait:

/std:c++17

Engedélyezi a C++17 szabványspecifikus funkciókat és viselkedést. Lehetővé teszi az MSVC fordító által implementált C++17 funkciók teljes készletét. Ez a beállítás letiltja a fordító és a standard kódtár támogatását a C++17 után új vagy módosított funkciók esetében. Kifejezetten letiltja a C+++17 utáni módosításokat a C++ Standardban és a Munka piszkozat verzióiban. Nem tiltja le a C++ Standard visszamenőleges hibafrissítéseit. Ez a lehetőség a Visual Studio 2017 15.3-s verziójától kezdve érhető el.

Az MSVC fordító verziójától vagy frissítési szintjétől függően előfordulhat, hogy a C++17-funkciók nem implementálhatók vagy teljes mértékben megfelelnek a /std:c++17 beállítás megadásakor. A C++ nyelvi megfelelőségről a Visual C++ kiadási verziójában a Microsoft C/C++ nyelvi megfelelőségi olvashat.

/std:c++20

Engedélyezi a C++20 szabványspecifikus funkciókat és viselkedést.

Engedélyezi a /permissive- által biztosított szabványos megfelelőségi módot, kivéve, ha a /permissivekifejezetten felül van bírálva.

/std:c++23preview

Engedélyezi az előzetes verziójú C++23 szabványspecifikus funkciókat és viselkedést. A Visual Studio 2022 17.13 Előzetes verzió 4-es verziójától kezdve érhető el. Az előzetes verziójú funkciók változhatnak, és előfordulhat, hogy nem kompatibilisek az ABI-kkal a kiadások között.

Ez a kapcsoló el lesz távolítva a /std:c++23 kapcsoló implementálásakor – ekkor a C++23 funkciók teljes körűen implementálva lesznek, és az ABI stabil lesz. Ha a projekttulajdonságok C/C++>Nyelvi meg Előzetes verzió – ISO C++ 23 Standard (/std:c++preview), az automatikusan /std:c++23 lesz az új kapcsoló implementálása után.

Ez a kapcsoló abban különbözik /std:c++latest, hogy csak a C++23 szabvány részét képező funkciókat engedélyezi. Nem engedélyezi a kísérleti vagy folyamatban lévő funkciókat.

/std:c++latest

Lehetővé teszi a következő ISO C++ munkatervezetben javasolt összes jelenleg implementált fordító- és standard kódtár-funkciót, valamint néhány folyamatban lévő és kísérleti funkciót. Ez a lehetőség a Visual Studio 2015 3. frissítésétől kezdve érhető el.

Az MSVC fordító verziójától vagy frissítési szintjétől függően előfordulhat, hogy az aktuális C++ munkavázlat közzétett C++ szabványainak vagy javasolt funkcióinak funkciói nem lesznek teljesen implementálva vagy teljesen megfelelnek a /std:c++latest beállítás megadásakor. Javasoljuk, hogy a Visual Studio legújabb verzióját használja a szabványok maximális megfelelősége érdekében. A C++ nyelv és a kódtár kompatibilitását a Visual C++ kiadási verziójában a Microsoft C/C++ nyelvmegformelőségének című cikkben tekintheti meg.

A Visual Studio 2019 16.8-as verziója óta a /std:c++latest lehetőség engedélyezte a /permissive- által biztosított szabványos megfelelőségi módot, kivéve, ha a /permissivekifejezetten felülírta.

A támogatott nyelvi és kódtári funkciók listáját A C++ újdonságai a Visual Studio.

A /std:c++latest beállítás nem engedélyezi a /experimental kapcsoló által védett funkciókat, de ezek engedélyezéséhez szükség lehet rájuk.

Jegyzet

A /std:c++latest által engedélyezett fordító- és kódtár-funkciók egy későbbi C++ szabványban jelenhetnek meg. A még nem jóváhagyott funkciók értesítés nélkül módosulnak vagy eltávolíthatók, és as-is alapon érhetők el.

C-szabványok támogatása

A Microsoft C fordítót a /TC vagy /Tc fordítóval hívhatja meg. Alapértelmezés szerint .c fájlkiterjesztéssel rendelkező kódhoz használják, kivéve, ha egy /TP vagy /Tp beállítás felülírja. Az alapértelmezett C fordító (azaz a fordító, ha /std:c11 vagy /std:c17 nincs megadva) az ANSI C89-et implementálja, de számos Microsoft-bővítményt tartalmaz, amelyek némelyike az ISO C99 része. A C89 egyes Microsoft-bővítményei letilthatók a /Za fordítóval, de mások továbbra is érvényben maradnak. Nem lehet szigorú C89-megfelelőséget megadni. A fordító nem implementálja a C99 számos szükséges funkcióját, így a C99-megfelelőséget sem lehet megadni.

/std:c11

Engedélyezi az ISO C11-megfelelőséget. A Visual Studio 2019 16.8-os verziójától kezdve érhető el.

/std:c17

Engedélyezi az ISO C17-megfelelőséget. A Visual Studio 2019 16.8-os verziójától kezdve érhető el.

Mivel az új előfeldolgozó szükséges ezeknek a szabványoknak a támogatásához, a /std:c11 és /std:c17 fordító beállításai automatikusan beállítják a /Zc:preprocessor beállítást. Ha a C11 vagy C17 hagyományos (örökölt) előfeldolgozóját szeretné használni, explicit módon kell beállítania a /Zc:preprocessor- fordítót. A /Zc:preprocessor- beállítás beállítása váratlan viselkedéshez vezethet, ezért nem ajánlott.

Jegyzet

A kiadás időpontjában és a Visual Studio 2019 16.10-es verzióján keresztül a Visual Studio által telepített Windows SDK- és UCRT-kódtárak még nem támogatják a C11- és C17-kódot. A Windows SDK és az UCRT frissített verziója szükséges. További információ és telepítési utasítások: A C11 és a C17 telepítése a Visual Studio.

Ha /std:c11 vagy /std:c17ad meg, az MSVC támogatja a szabványok által megkövetelt C11 és C17 összes funkcióját. A /std:c11 és /std:c17 fordító beállításai támogatják ezeket a funkciókat:

Az IDE az IntelliSense C-beállításait és a kódkiemelést használja, ha a forrásfájlok .c fájlkiterjesztéssel rendelkeznek, vagy amikor megadja a /TC vagy /Tc fordítót. A C intelliSense jelenleg a _Alignas, _Alignof, _Noreturnés _Static_assertkulcsszavakat emeli ki, de a standard fejlécekben definiált egyenértékű makrókat nem: alignas, alignof, noreturnés static_assert.

Mivel a C17 nagyrészt az ISO C11 hibajavítási kiadása, a C11 MSVC-támogatása már tartalmazza az összes vonatkozó hibajelentést. A C11 és a C17 verziók között a __STDC_VERSION__ makró kivételével nincs különbség. A C11 201112L, a C17-hez pedig 201710L.

A fordító nem támogatja az ISO C11 legtöbb választható funkcióját. A C11 választható funkciói közül több is szükséges volt a C99-hez, amelyeket az MSVC architekturális okokból nem implementált. A funkcióteszt makrók, például a __STDC_NO_VLA__ segítségével észlelheti az egyes funkciók fordítótámogatási szintjeit. További információ a C-specifikus előre definiált makrókról: Előre definiált makrók.

  • Nincs megfelelő többszálú, atomi vagy összetett számtámogatás.

  • aligned_alloc támogatás hiányzik a Windows halom implementációja miatt. A másik lehetőség a _aligned_mallochasználata.

  • Hibajelentés 400 támogatása jelenleg nem érhető el realloc, mert ez a módosítás megszakítaná az ABI-t.

  • A változó hosszúságú tömb (VLA) támogatása nem tervezett. A VLA-k a gets-hez hasonló támadási vektorokat biztosítanak, amelyek elavultak és eltávolításra tervezettek.

/std:clatest

A /std:clatest beállítás a C++ fordító /std:c++latest kapcsolójához hasonlóan viselkedik. A kapcsoló lehetővé teszi a jelenleg implementált fordítót és a következő C szabványban javasolt standard kódtár-funkciókat, valamint néhány folyamatban lévő és kísérleti funkciót.

További információt a Microsoft C/C++ nyelvi megfelelőség C Standard kódtár funkcióicímű szakaszában talál.

A fordító beállításának beállítása a Visual Studio fejlesztői környezetében

  1. Nyissa meg a projekt Tulajdonságlapok párbeszédpanelt. További információ: C++ fordító beállítása és tulajdonságok létrehozása a Visual Studio.
  2. Válassza a Konfiguráció tulajdonságai>C/C++>Nyelv tulajdonságlapját.
  3. C++ Language Standard (vagy c, C Language Standardesetén) válassza ki a legördülő menüből a támogatott nyelvi szabványt, majd válassza OK vagy alkalmazása a módosítások mentéséhez.

Lásd még:

/Zc:__cplusplus[-]
MSVC-fordító beállításai
MSVC fordító parancssori szintaxisa