Dela via


Visual Studio IDE-verktyg för att uppgradera C++-kod

Visual Studio hjälper dig att uppgradera äldre C++-kod med kompilatoralternativ, kodanalysvarningar och redigeringsfunktioner som snabbkorrigeringar, snabbinformation och den förbättrade rullningslisten. Termen "äldre kod" refererar till någon av följande kategorier:

  • Kod som tidigare var tillåten av Microsoft C++-kompilatorn (MSVC) men som aldrig överensstämde med C++-standarden.

    Om du vill uppgradera äldre MSVC-kod som inte överensstämmer aktiverar du kompileringsalternativet /permissive- . Alla förekomster av icke-överensstämmande användningar understryks med röda slingriga linjer i kodredigeraren. Felmeddelandena i fönstret Fellista innehåller en rekommendation för hur du åtgärdar felet. Klicka på felkoden för att gå till hjälpsidan i dokumentationen. Om det är opraktiskt att åtgärda alla fel samtidigt kan du uppgradera kod som inte överensstämmer i steg genom att aktivera /permissive- alternativet, åtgärda vissa fel och sedan inaktivera alternativet igen. Koden kompileras med de nya förbättringarna och du kan gå tillbaka och åtgärda de återstående problemen vid ett senare tillfälle. Se sidan /permissive- för exempel på MSVC-kod som inte överensstämmer.

  • Kod som var tillåten i en tidigare version av C++-standarden men som har föråldrats eller tagits bort i en senare version.

    Om du vill uppgradera till en nyare språkstandard anger du alternativet C++ Language Standard till önskad standard och åtgärdar eventuella kompileringsfel som genereras. I allmänhet rekommenderar vi att du anger språkstandarden till /std:c++17 eller /std:c++20. De fel som uppstår när du uppgraderar till en nyare standard är inte relaterade till de fel som uppstår när du använder /permissive- alternativet .

  • Kod som överensstämmer med alla versioner av standarden men som inte längre anses vara bästa praxis i modern C++.

    Om du vill identifiera kod där ändringar rekommenderas kör du kodanalys.

Öppna och konvertera ett äldre projekt

Om ditt äldre projekt baseras på en äldre version av Visual Studio kan du öppna det i Visual Studio 2017 eller Visual Studio 2019. Visual Studio konverterar det automatiskt till det aktuella projektschemat med stöd för alla de senaste kompilator- och IDE-funktionerna.

Skärmbild av dialogrutan Uppgradera ett projekt.

Mer information finns i Uppgradera C++-projekt från tidigare versioner av Visual Studio.

Sök i kodbasen

Att uppgradera en kodbas innebär ofta att söka igenom flera filer. Om du vill söka efter något i kodbasen trycker du på Ctrl+T för att visa sökrutan Gå till alla .

Skärmbild av dialogrutan Gå till alla.

Om du vill begränsa sökomfånget skriver du ett av filtren med en bokstav, följt av ett blanksteg och sedan det du letar efter.

Fellista

När du har angett önskad C++ Language Standard och andra kompilatoralternativ (Projektegenskaper>>allmänt) trycker du på Ctrl+Skift+B för att kompilera projektet. Du kan förvänta dig att se vissa fel och varningar i form av röda squiggles på olika platser i koden. Felen visas också i fellistan. Om du vill ha mer information om ett specifikt fel klickar du på felkoden för att gå till hjälpsidan i dokumentationen. Felkoder som börjar med ett "C" är kompilatorfel. Koder som börjar med "MSB" är MSBuild-fel som indikerar ett problem med projektkonfigurationen.

Skärmbild som visar kompilator- och MSBuild-fel i fellistan.

Indikator för dokumenthälsa

Dokumentets hälsoindikator längst ned i redigeraren visar antalet fel och varningar i det aktuella dokumentet och gör att du kan navigera direkt från en varning/ett fel till nästa.

Indikator för dokumenthälsa.

I många fall kan du hitta mer information om ett specifikt fel i dokumentationen om Visual Studio-ändringshistoriken och anpassningsförbättringar.

Använda kodanalys för att modernisera koden

När du uppgraderar rekommenderar vi att du kör kodanalys i projektet så att koden åtminstone överensstämmer med Microsofts interna rekommenderade regler. Dessa regler är en kombination av regler som definierats av Microsoft och en delmängd av C++ Core Guidelines. Genom att följa dessa kommer du avsevärt att minska eller eliminera vanliga buggkällor och samtidigt göra koden mer läsbar och därför enklare att underhålla. Kodanalys med hjälp av Microsofts inbyggda rekommenderade regler är aktiverat som standard. Du kan aktivera ytterligare regler underKodanalys>>. Kod som bryter mot en av reglerna flaggas som en varning och understryks med en grön squiggle i kodredigeraren. Hovra över markeringen för att se en Snabbinfo-tooltip som beskriver problemet.

Skärmbild av ett verktygstips för kodanalys.

Klicka på filterikonen i kolumnen Kod för att välja vilka varningar som ska visas.

Skärmbild av kodanalysfilter i fellistan.

Fel och varningar för kodanalys visas också i fellistan precis som kompilatorfel.

Skärmbild av kodanalysvarningar i fellistan.

Du kan ändra vilka regler som är aktiva och skapa anpassade regeluppsättningar. Mer information om hur du använder kodanalys finns i Kodanalys för C/C++-översikt.

Använda snabbåtgärder för att modernisera kod

Kodredigeraren innehåller snabbåtgärder för några vanliga rekommendationer. När glödlampaikonen visas kan du klicka på den för att se tillgängliga snabbåtgärder.

Konvertera makron till constexpr-funktioner

Följande bild visar användningen av makrot med namnet AVERAGE, som har standard-semantisk färg. Bilden visar även verktygstipset QuickInfo som visas när muspekaren svävar över den.

Skärmbild av en QuickInfo-makroexpansion.

Eftersom användningen av makron inte rekommenderas i modern C++, gör Visual Studio det enkelt att konvertera makron till constexpr funktioner:

  1. Högerklicka på AVERAGE och välj Gå till Definition.

  2. Klicka på skruvmejselikonen och välj Konvertera makro till constexpr

    Skärmbild av ett snabbåtgärdsmakro till constexpr.

Makrot konverteras enligt nedan:

Skärmbild av en constexpr-funktion.

Och anropet till AVERAGE är nu färgat som ett funktionsanrop, och knappbeskrivningen Snabbinformation visar funktionens härledde typ:

Skärmbild av ett constexpr-funktionsanrop.

Initiera variabler

Onitialiserade variabler kan innehålla slumpmässiga värden som leder till allvarliga buggar. Kodanalys flaggar dessa instanser och redigeraren tillhandahåller en snabbåtgärd:

Skärmbild av popup-fönstret för en oinitialiserad variabel.

Konvertera till rå strängliteral

Råsträngliteraler är mindre felbenägna och enklare att skriva än strängar med inbäddade escape-tecken. Högerklicka på en sträng och välj Snabbåtgärder för att konvertera den till en rå strängliteral.

Oformaterad strängliteral.

Strängen konverteras till: R"(C:\Users\bjarnes\demo\output.txt)".