Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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 199711L
makró __cplusplus
értékétől függ, az MSVC fordító csak akkor módosítja a makró értékét, ha a /Zc:__cplusplus
beá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++14
megadá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:
-
auto
szabályai braced-init listákkal - sablonparaméterek
typename
- trigráfok eltávolítása
- névterek és enumerátorok attribútumai
- u8 karakterkonstansok
/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 /permissive
kifejezetten 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 /permissive
kifejezetten 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:c17
ad 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:
_Pragma
restrict
-
_Noreturn
és <stdnoreturn.h> -
_Alignas
,_Alignof
és <stdalign.h> -
_Generic
és <tgmath.h> _Static_assert
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_assert
kulcsszavakat 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_malloc
haszná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
- 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.
- Válassza a Konfiguráció tulajdonságai>C/C++>Nyelv tulajdonságlapját.
- 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