Sdílet prostřednictvím


Nejnovější změny ve Visual C++ 2008

Tento dokument obsahuje seznam nejnovějších změn v Visual C++ 2010.

Kompilátor Visual C++

  • klíčové slovo auto má nový výchozí význam. Vzhledem k tomu, že použití staré ho významu je vzácné, většina aplikací není ovlivněna tuto změnou.

  • Nové static_assert klíčové slovo je zavedeno, které způsobí konflikt názvu, pokud již existuje identifikátor s tímto názvem v kódu.

  • Podpora pro nový zápis lambdy nezahrnuje podporu pro kódování necitovaných identifikátorů GUID v IDL Atribut uuid.

  • .NET Framework 4 zavádí koncept poškozený stav výjimky, to jsou výjimky, které opustí proces v neopravitelném stavu poškození. Ve výchozím nastavením nelze zachytit poškozený stav výjimky, dokonce i s / EHa možností kompilátoru, který zachytí všechny ostatní vyjímky.

    Chcete-li explicitně zachytávat výjimky v poškozeném stavu, použijte __try - __except příkazy. Nebo aplikovat [HandledProcessCorruptedStateExceptions] atribut pro povolení funkce zachycení výjimky v poškozeném stavu.

    Tato změna ovlivní především systémové programátory, kteří pravděpodobně musí zachytit výjimky v poškozeném stavu. Osm vyjímek je STATUS_ACCESS_VIOLATION, STATUS_STACK_OVERFLOW, EXCEPTION_ILLEGAL_INSTRUCTION, EXCEPTION_IN_PAGE_ERROR, EXCEPTION_INVALID_DISPOSITION, EXCEPTION_NONCONTINUABLE_EXCEPTION, EXCEPTION_PRIV_INSTRUCTION, STATUS_UNWIND_CONSOLIDATE. Další informace o těchto výjímkách získáte v GetExceptionCode makru.

  • Revidované /GS možnosti kompilátoru chrání proti přetečení zásobníku více komplexněji než v předchozích verzích. Tato verze může vložit další bezpečností kontroly do zásobníku, to ovšem může snížovat výkon. Použitím nového klíčového slova __declspec(safebuffers) oznamujete kompilátoru aby nevkládal bezpečnostní kontroly pro určité funkce.

  • Pokud kompilujete s oběma /GL (optimalizace celého programu) a /CLR (kompilace společného jazykového modulu ) možnostmi kompilátoru, tak /GL možnost je ignorována. Tato změna byla provedena, protože kombinace voleb kompilátoru poskytují málo výhod. V důsledku této změny je vylepšen výkon aktuální verze.

  • Ve výchozím stavu je podpora trigraphs vypnuta ve Visual C++ 2010 . Použítím možnosti kompilátoru**/Zc:trigraphs** povoluje podporu trigraphs. Trigraph se skládá ze dvou po sobě jdoucích otazníků ("??") následovaných jedinečný třetím znakem. Kompilátor nahradí trigraph odpovídajícím interpunkčním znaménkem.. Například kompilátor nahradí "??=" trigraph znakem '#' (znak čísla). Použití trigraphs v C je ve zdrojových souborech, které používají znakovou sadu, která neobsahuje vhodné grafické reprezentace pro některá interpunkční znaménka.

  • Propojovací program již podporuje optimalizace pro Windows 98. / OPT (optimalizace) volba vytváří chyby při kompilaci, pokud zadáte /OPT:WIN98 nebo /OPT:NOWIN98.

  • Výchozí možnosti kompilátoru, které jsou určeny vlastnostmi systému sestavení RuntimeLibrary a DebugInformationFormat, byly změněny. Ve výchozím nastavení jsou tyto vlastnosti sestavení uvedeny v projektech, které jsou vytvořeny ve verzích Visual C++ 7.0 až 10.0. Pokud migrujete projekt, který byl vytvořen ve verzi Visual C++ 6.0, zvažte, zda chcete pro tyto vlastnosti zadat hodnotu.

    V kompilátoru Visual C++ 2010 platí, že RuntimeLibrary = MultiThreaded (/MD) a DebugInformationFormat = ProgramDatabase (/Zi). Ve verzi Visual C++ 9.0 platí, že RuntimeLibrary = MultiThreaded (/ MT) a DebugInformationFormat = Disabled.

Společný jazykový modul runtime (CLR )

  • Microsoft C# a Visual Basic kompilátory můžou nyní vytvořit neprimární definiční sestavení (no-PIA). Sestavení no-PIA lze použít na modelech typu COM bez nasazení příslušného primárního definičního sestavení (PIA). Pokud používáte no-PIA sestavení vyrobené ve Visual C# nebo Visual Basic, musíte odkazát PIA sestavení na kompilaci příkazu před odkazem jakéhokovil no-PIA sestavení, které používá knihovnu.

Projekty Visual C++ a nástroj MSBuild

  • Projekty Visual C++ nyní vycházejí z nástroje MSBuild. Proto soubory projektu používat nový formát souboru jazyka XML a .vcxproj příponu souboru. Visual C++ 2010 automaticky převede soubory projektu z předchozích verzí Visual Studio na nový formát souboru.

    Existující projekt je ovlivněn, pokud je závislý na předchozí sestavovací nástroj, VCBUILD.exe nebo na příponu souboru projektu, .vcproj.

  • V dřívějších verzích, Visual C++ podporoval pozdní vyhodnocení vlastnosti listů. Například nadřazený seznam vlastností může naimportovat podřízený seznam vlastností a nadřazený může pomocí proměnná definované v podřízený definovat jiné proměnné. Pozdní hodnocení povoluje nadřazenému použít proměnnou podřízeného ještě předtím, než byl podřízený seznam vlastností importován. V Visual C++ 2010, seznam proměnných projektu nemůže být použit dříve, než je definován, protože MSBuild podporuje pouze včasné vyhodnocení.

Integrované vývojové prostředí (IDE)

  • Ukončení aplikace dialogové okno již neukončí aplikaci.

    V předchozích verzích při abort() nebo terminate() funkci bylo zavřeno sestavení aplikace, provozní knihovna jazyka C zobrazila zprávu o ukončení aplikace v konzolovém okně nebo v dialogovém okně. Zprávy říkala "Tato aplikace vydala požadavek na provozní modul, aby ji ji ukončil neobvyklým způsobem. Pro více informací prosím kontaktujte tým podpory aplikace."

    Zpráva ukončení aplikace byla redundantní, protože systému Windows následně zobrazil aktuální obsluhovací rutinu ukončení, která byla obvykle hlášení o chybě systému Windows (Dr. Watson) dialogové okno programu nebo Visual Studio debugger. Spuštění v Visual Studio 2010, nezobrazí zprávu běhové knihovny jazyka C. Navíc běhový modul zabraňuje ukončení aplikace před tím, než se spustí ladicí program.

    To je změna ovlivňující změna, pouze pokud jste závislí na předchozím chování zprávy ukončení aplikace.

  • Konkrétně pro Visual Studio 2010 IntelliSense nefunguje v C++/CLI kódu nebo atributech, Najít všechny odkazy nefunguje pro lokální proměnné, a kód modelu nezíská typy jmen z importovaného sestavení nebo nenalezne u typů jejich plně kvalifikované názvy.

Visual C++ - knihovny

  • Třída SafeInt je obsažena v aplikaci Visual C++ a již není v samostatném souboru ke stažení. To je ovlivňující změna pouze v případě, že jste vytvořili třídu, která se také nazývá "SafeInt"

  • Model nasazení knihoven déle používá manifesty k nalezení konkrétní verze knihovny DLL. Namísto toho název jednotlivých dynamických knihoven odkazů obsahuje číslo verze a tento název můžete použít k vyhledání knihovny. Další informace naleznete v tématu Nasazení ve Visual C++ 2010.

  • V dřívejších verzích sady Visual Studio jste mohli přestavovat knihovny run-time. Visual C++ 2010 již nepodporuje vytváření vlastních kopií souborů knihovny doby běhu v jazyce C.

Standardní šablona knihovny

  • <iterator> hlavička již není automaticky zahrnuta v mnoha ostatních hlavičkových souborech. Místo toho zahrnout toto hlavičku explicitně, pokud požadujete podporu u samostatných iterátorů definovaných v <interator> hlavičce.

  • <algorithm> hlavička, checked_* a unchecked_* funkce jsou odebrány. A v <iterator> hlavičce, checked_iterator třída je odebrána a unchecked_array_iterator třída byla přidána.

  • CComPtr::CComPtr(int) konstruktor je odebrán. Tento konstruktor dovoluje CComPtr objektu být zkonstruován z NULL makra, ale bylo zbytečné a nesmyslené ho konstruovat z nenulového celého čísla.

    CComPtr pořád může být konstruován z NULL, který je definován jako 0, ale selže, pokud je vytvořen z celého čísla jiného než 0. S tímto problémem se můžete s největší pravděpodobností setkat v situaci popsané v následujícím pseudo-kódu.

    pair<X, CComPtr<T>> myVar;
    myVar = make_pair(x, NULL);
    

    Chcete-li opravit druhý údaj, použijte nullptr klíčové slovo namísto NULL makra.

    myVar = make_pair(x, nullptr)
    
  • Následující funkce člena ctype byly odebrány: ctype::_Do_narrow_s, ctype::_Do_widen_s, ctype::_narrow_s, ctype::_widen_s. Pokud aplikace používá jednu z těchto členských funkcí, musíte ji nahradit odpovídající nezabezpečenou verzí: ctype::do_narrow, ctype::do_widen, ctype::narrow, ctype::widen.

Knihovny CRT, MFC a ATL

  • Podpora byla odebrána uživatelům sestavení knihoven CRT, MFC a ATL. Například příslušný nmake soubor není k dispozici. Uživatelé však stále mají přístup ke zdrojovému kódu pro tyto knihovny. Dokument, který popisuje možnosti nástroje MSBuild, který společnost Microsoft používá k sestavení těchto knihoven bude pravděpodobně zveřejněn na blogu týmu Visual C++.

  • MFC podpora pto IA64 byla odebrána. Nicméně, podpora knihoven CRT a ATL na IA64 je i nadále poskytována.

  • Řadové číslovky již nejsou opakovány v knihovně MFC modulu definice (.def) souborů. Tato změna znamená, že se řadové číslovky nebudou lišit mezi dílčími verzemi a bude zajištěna lepší binární kompatibilita pro servisní balíčky a rychlé bezpečnostní opravy.

  • Byla přidána nová virtuální funkce třída CDocTemplate. Tato nová virtuální funkce je CDocTemplate::OpenDocumentFile. Předchozí verze OpenDocumentFile obsahovaly dva parametry. Nová verze má tři parametry. Pro podporu restartování správce musí libovolná třída odvozená z verze CDocTemplate implementovat tyto tři parametry. Další informace o této funkci naleznete v CDocTemplate::OpenDocumentFile. Nový parametr je bAddToMRU.

Makra a proměnná prostředí

  • Proměnné prostředí __MSVCRT_HEAP_SELECT již není podporováno. Tato proměnné prostředí je odebráno a není nijak nahrazeno.

Microsoft Macro Assembler - reference

Viz také

Další zdroje

Začínáme s Visual C++ 2010