C ++ Succinct Visual Studio și C ++

IntelliSense

Dacă utilizați aproape orice vizualizare a tastaturii Visual Studio, tastând Ctrl + J va afișa IntelliSense. În Visual Studio 2012, IntelliSense ar trebui să apară automat în C ++. În Visual Studio 2010 și mai devreme, trebuie să o invocați manual.


Fragmente de cod

Fragmentele de coduri reprezintă o nouă caracteristică pentru C ++ în Visual Studio 2012. Ele nu au existat în versiunile anterioare. Dacă nu le-ați folosit niciodată în nici o limbă, atunci într-un proiect C #, începeți să tastați "pentru" pentru a începe o buclă; odată ce IntelliSense a ales fragmentul de tip, apăsați de două ori tasta Tab și urmăriți, pentru că bucla apare completată cu câmpurile automate pe care le puteți edita. Utilizați tasta Tab pentru a comuta între câmpuri. Când ați terminat editarea câmpurilor, apăsați Enter. Cursorul va fi transportat în interiorul corpului bucla cu editările de câmp pe care le-ați făcut ca text normal.

Fragmentele de coduri sunt deosebit de drăguțe pentru comenzile de comutare care comută pe un enum, deoarece acestea vor popula automat comanda întrerupătorului cu toți membrii enum.


Inclusiv bibliotecile

În C ++, de obicei, nu este suficient să includeți doar un fișier antet. În mod normal, trebuie să spuneți link-ul să se lege de o bibliotecă care implementează codul declarat în fișierul antet. Pentru a face acest lucru, trebuie să editați proprietățile proiectului, accesibile din meniul Project ca Proprietăți ProjectName ...

În proprietăți, în Proprietăți de configurare> Linker> Intrare, unul dintre câmpuri este Dependențe suplimentare. Aceasta este o listă separată cu punct și virgulă a fișierelor .LIB pe care trebuie să le legați. Ar trebui să se termine cu% (Suplimentare), astfel încât să fie adăugate orice biblioteci suplimentare conectate prin MS Build.

Pentru un joc tipic în stilul metroului DirectX 11, de exemplu, este posibil să vedeți următoarele:

d2d1.lib; d3d11.lib; dxgi.lib; ole32.lib; windowscodecs.lib; dwrite.lib; xaudio2.lib; xinput.lib; mfcore.lib; mfplat.lib; mfreadwrite.lib; mfuuid.lib; % (AdditionalDependencies)

Dacă primiți o eroare de legătură care vă spune că nu poate găsi o definiție a cevaului pe care îl utilizați, găsiți funcția sau clasa pe MSDN; documentația vă va indica atât fișierul antet, cât și fișierul de bibliotecă de care aveți nevoie.

Generarea fișierelor codului de asamblare

Dacă doriți să vizualizați o aproximație foarte apropiată a codului de asamblare în care se compilează codul, în proprietățile proiectului, sub Setări de configurare> C / C ++> Fișiere de ieșire, setați opțiunea Asamblare ieșire la altceva.

Aș recomanda fie Adunarea Numai Afișare (/ FA), fie Adunarea cu Codul sursă (/ FAs). Lista de anunțuri numai pentru Adunare presară numeroase comentarii pentru numărul de linii pe care le puteți trimite, de obicei, cu fișierele cu cod sursă pentru a vedea ce cod C ++ corespunde codului de asamblare. Acest lucru poate fi util dacă doriți ca un loc să vadă totul, mai degrabă decât să răsturnați înainte și înapoi între ce ați deschis fișierul .ASM din (eu folosesc Notepad ++) și Visual Studio.

Rețineți că ansamblul generat utilizează macrocomenzi MASM (găsiți-le pe MSDN). Dacă nu știți ce înseamnă o anumită instrucțiune de asamblare (de exemplu, LEA), puteți căuta pe Internet sau puteți descărca manualul de programare corespunzător de pe site-ul Intel (presupunând x86 / Itanium), site-ul AMD (presupunând x64) sau ARM Holding's (presupunând ARM). Dacă nu ați învățat niciodată niciun ansamblu, recomand cu siguranță că faceți acest lucru (încercați să creați o aplicație simplă Windows Console).

Înțelegerea asamblării vă oferă o mai bună înțelegere a modului în care computerele funcționează într-adevăr pe plan intern. Combinați asta cu cunoașterea faptului că calculatoarele sunt toate hardwired pentru a începe executarea aceluiași cod de fiecare dată când acestea sunt alimentate (în mod tradițional, BIOS-ul pe PC-uri, deși acum este înlocuit de UEFI), și misterul cum și de ce computerul de lucru rapid începe să se estompeze.


Erori greșite în construire

Dacă întâlniți o eroare de construire care pare complet oribilă, este posibil ca aceasta să fie făcută de linker. Veți vedea astfel de mesaje, de exemplu:

Eroare la eroarea 2 LNK2019: simbol extern nerezolvat "public: __thiscall SomeClass :: SomeClass (wchar_t const *)" (? 0SomeClass @@ QAE @ PB_W @ Z) menționat în funcție "void __cdecl DoSomething (void)" (? DoSomething @@ YAXXZ) D: \ VS2010Proj \ CppSandbox \ CppSandbox \ CppSandbox.obj CppSandbox

Tot ce spune este că nu poate găsi o funcție pe care ați spus că ar trebui să o găsească. În acest caz, am adăugat cuvântul cheie inline la o definiție a funcției constructorului în fișierul CPP fără a ne aminti să mutați definiția în fișierul antet. Orice funcții inline trebuie să fie în antet, astfel încât linkerul să nu te urască.

Toți acești și @@s și sunt doar cum C ++ mangles nume atunci când a compilat codul în fișiere obiect. Mangalarea numelui este compatibilă intern pentru compilatorul în cauză, dar standardul ISO / IEC nu mandatează nicio schemă specială pentru denigrarea numelui. Diferitele compilatoare pot, și de cele mai multe ori vor face lucruri diferite.

În mod normal, dacă vedeți un mesaj de eroare de construire îngrozitor, există șanse de la linker și este o eroare simbolică nerezolvată. Dacă spune că nu poate găsi ceva pe care l-ați scris, verificați dacă declarația dvs. din fișierul de antet se potrivește cu definiția, de obicei în fișierul de cod, dar poate în antet, sau ați uitat să o scrieți sau poate ați declarat inline, dar încă mai aveți în fișierul de cod.

Un exemplu în acest caz este în cazul anterior: meu SomeClass :: SomeClass (wchar_t const *) constructor functie (intotdeauna scriu tip const const nu tip const, deci chiar si acel bit este reconstruit).

Dacă este o funcție a altcuiva sau alt simbol, atunci este posibil să nu-i spuneți linkerului despre fișierul .LIB care îl conține.

În .NET, adăugați doar o referință la un ansamblu pentru a obține atât biții de declarație, cât și definiția reală într-un singur. În C ++, declarația este fișierul antet, în timp ce codul de definiție, excluzând codul inline, care trebuie să fie și în fișierul antet, se află într-o bibliotecă separată. Căutați în biblioteca MSDN simbolul lipsă și găsiți numele fișierului de bibliotecă pe care trebuie să-l adăugați.

Elaborarea erorilor C ++ poate părea destul de înfricoșătoare, mai ales când primiți o eroare de construire care implică un șablon. Acestea te pot face să vrei să renunți. Dar nu. Nu lăsați niciodată mesajele de eroare oribile să câștige. Mai întâi, dați seama dacă vine de la compilator (va avea un format de eroare C ####) sau linkerul (LNK #### format de număr de eroare).

Dacă de la compilator, înseamnă de obicei o eroare de sintaxă. Verificați dacă ați uitat #pragma o dată în partea de sus a fișierului antet. O altă problemă ar putea fi aceea în care ați folosit ceva din Biblioteca Standard (de ex., endl), dar ați uitat să aveți un # nume de spațiu utilizat; sau să o prefixăm cu std :: (adică. std :: endl).

Puteți face una sau ambele, dar trebuie să faceți cel puțin una. Unele lucruri ar putea fi într-un spațiu de nume diferit. În Visual Studio 2010, unele funcții se află, de exemplu, în spațiul de nume stdext. Același lucru este valabil și pentru toate spațiile de nume din propriul cod.

Dacă nu aveți noroc pe cont propriu, mergeți la MSDN și tastați prima parte a mesajului de eroare. Veți găsi probabil câteva linkuri utile la discuțiile pe forumurile MSDN, pe StackOverflow, poate un articol MSDN sau un post de pe blog-ul MSDN, chiar dacă doar pagina codului de eroare va avea sugestia de care aveți nevoie. Dacă toate celelalte nu reușesc, postați o întrebare pe un forum pe forum: MSDN, site-ul StackExchange corespunzător sau Hubul App.

O eroare de linker este în mod obișnuit un simbol nerezolvat, care de obicei înseamnă că aveți o nepotrivire în declarație și definiție, aveți o linie inline în afara antetului său sau nu aveți biblioteca potrivită adăugată la dependențele suplimentare ale proiectului din opțiunile linkerului proiectului. Dacă este altceva, încercați strategiile din paragraful anterior; ele se aplică la fel de bine la erorile de linker ca la erorile compilatorului.

Concluzie

Dacă faceți o mulțime de dezvoltare C ++, atunci Visual Studio este cu siguranță un IDE (Mediu de Dezvoltare Integrat) care merită luat în considerare. Ea are multe de oferit decât ceea ce este acoperit în acest articol, așa că vă încurajez să încercați și să explorați o gamă largă de caracteristici.

Această lecție reprezintă un capitol din C ++ Succinctly, o carte electronică gratuită de la echipa de la Syncfusion.
Cod