Vývojové prostředí s integrovaným překladačem C++
Vývojové prostředí se (z uživatelského hlediska) skládají z:
- editoru pro psaní kódu – jakýkoli textový editor, nejlépe s podporou jazyka (zvýraznění/obarvení klíčových slov, konstant …), analýzou zdrojového textu v reálném čase (nápovědy/refactoring), podporou zobrazení chyb (propojení výstupu překladače s editorem pro ukázání místa chyby a vypsání chybového textu), podpora debuggeru (propojení debuggeru s editorem).
- překladač - kontrola jazykové správnosti textu, možnost spouštět samostatně z příkazového řádku,
- linker – provádí spojení přeložených modulů a knihoven do výsledného souboru (například spustitelný exe soubor), možnost spouštět z příkazového řádku
- debugger – je nástroj pro ladění (debugging) často spojený - možnost provádět program po jednotlivých krocích a sledovat hodnoty proměnných.
Seznámení s Microsoft Visual C++
Popis odpovídá programu Visual Studio 2010, ale jiná prostředí mají podobné volby a nastavení (s jinými názvy)
Help je přístupný z prostředí nebo je na:
F1
na klíčovém slově či funkci otevře help pro daný termín – help
na www
Abecední seznam funkcí pro jazyk C:
http://msdn.microsoft.com/en-us/library/634ca0c2.aspx
Obecná
stránka pro vývojáře: http://msdn.microsoft.com/en-US/
(též http://search.msdn.microsoft.com,
česky (pozor na strojové překlady)
http://msdn.microsoft.com/cs-cz/)
Podpora/support:
http://msdn.microsoft.com/cs-cz/aa570318(en-us).aspx,
Stránka pro Visual C++
http://msdn.microsoft.com/en-us/vstudio/hh386302.
Pro jazyk C++
http://msdn.microsoft.com/en-us/library/60k1461a(v=VS.100).aspx,
Na
www odkazech se často zobrazí témata helpu také pro ostatní jazyky
(Java, Pascal, C#, Basic, Fox Pro) takže je nutné pozorně vybírat,
který odkaz patří pro C.
Spuštění vlastního programu VisualStudio se provede z plochy ikonou, nebo kliknutím na názvu existujícího projektu (je-li nastaveno)
Po spuštění se objeví prázdné prostředí. (Dále je možné spustit prostředí poklikem na již vytvořený projekt. Při pokliknutí na vytvořený zdrojový kód je nutné mu vytvořit projekt.)
Rozhodneme se pro typ programu, který budeme vytvářet. Můžeme vytvářet spustitelný soubor, knihovnu lib, dll … Dále můžeme určit nástroje, kterými budeme aplikaci vytvářet (například aplikaci s okny, s podporou existujících knihoven ...). Například nejjednodušší je konzolová aplikace - to je aplikace, která má vstup i výstup prostřednictvím konzoly (klávesnice, monitor)
Nový projekt (aplikace) se založí ve volbě File New v záložce project. Z předdefinovaných typů aplikací zvolíme konzolovou aplikaci. Z konzolových aplikací si zvolíme tu, ve které začínáme “od začátku” tedy tu, která je úplně prázdná – „Win32 console application“ z bloku Visual C++ -> WIN32
Dále je nutné určit kde se budou nacházet soubory projektu.
Soubory se musí ukládat do adresáře s právem zápisu, který se
uchovává. To je adresář na Vašem síťovém disku (nejčastěji P). Nebo
v documents na C:. Pozn. při zadávání projektu se síťové disky
nemusí v nabídce objevit (protože W mají s NOVELLem problém) a proto
je nutné tomu pomoci tak, že zapíšeme cestu k disku –
například P: a pak už bude disk vidět
Dále zvolíme jméno
projektu a jméno řešení. Řešení určuje horní úroveň a může obsahovat
několik projektů (samostatných úkolů). Vytváříme-li řešení, necháme
volbu „Create new solution“. Přidáváme-li projekt k
existujícímu řešení, zvolíme „Add to solution“.
Po potvrzení se objeví další dialog box, kde můžeme volbou „Application settings“ upřesnit vlastnosti konzolové aplikace. Z důvodu přenositelnosti zdrojových kódů zaškrtneme „application settings->empty project“ tj. Vytvoříme projekt, ve kterém nebudou žádné soubory a který nebude závislý na žádných knihovnách (ATL, MFC).
Takto vytvořený projekt neobsahuje, žádné zdrojové soubory. Pokud nezaškrtnete „Empty project“ vyvoří se zdrojový soubor společně s hlavní funkci _tmain. Dále se vám vytvoří soubory stdafx.h a stdafx.cpp, které v prostředí Visual C++ optimalizují překlad v jazyce C++ (v jazyce C nepracují). Z toho plyne, že toto je speciální volba vázaná na tento překladač a při přenosu zdrojů do jiných překladačů budete mít problémy. Tento problém nastane i v případě, že takto vytvořeným projektem budete chtít překládat soubory přenesené z jiného prostředí. (soubory stdafx … jsou totiž určeny k optimalizaci překladu a k nim musí být příslušně nastaven projekt. Pokud tedy nevhodně zkombinujete nastavení projektu a přítomnost těchto souborů, dojde při překladu k chybě).
V případě „standardní“ instalace, by se nyní mělo v levé části plochy otevřít okno Solution explorer obsahující „strom“ projektu (header, resource, source file), který nyní neobsahuje žádné soubory (source files).
Vytvoříme soubor tak, že přes pravé tlačítko myši zvolíme Solution explorer->Source File -> Add -> New Item -> c++ file (pro jazyk c jménu vnutíme příponu c, která zaručí překlad v jazyce C a ne C++). Pole solution explorer můžeme zobrazit v menu View/Solution explorer (ctrl+alt+L)
Pomocí stejné záložky ale s Existing Item můžete do projektu přidat již existující zdrojové soubory
Obdobně lze vytvářet v položce Header Files hlavičkové soubory přidávané do projektu
Po vytvoření řešení se dvěma projekty (ukol1 a ukol2) vypadá
SolutionExplorer následovně. Na dalším obrázku je odpovídající
adresářová struktura na disku.
Řešení má svůj vlastní adresář
reseni, ve kterém se nalézají soubory
(http://msdn.microsoft.com/cs-cz/library/3awe4781.aspx): *.sln –
hlavní soubor řešení; *.suo – parametry řešení; *.sdf –
databáze pomocných údajů pro rychlejší zpracování nápověd a odkazů
(dá se smazat);
Podadresáře jednotlivých projektů se zdrojovými
a hlavičkovými soubory. *.vcxproj.* – soubory se specifickými
informacemi (nastavení) projektu;
Projekty obsahují podadresáře
překladu (Debug, Release), které obsahují pomocné soubory vytvořené
při překladu (lze smazat).
Adresář řešení obsahuje také
podadresář Debug, Release – zde je výsledný spustitelný soubor
exe; *.ilk – informace o propojení souborů; *.pdb –
pomocný soubor databáze dat pro ladění. (lze smazat).
V adresáři
řešení je podadresář ipch s daty příslušných projektů, který
obsahuje (intellisense) soubory pro rychlejší překlad hlavičkových
souborů. (lze smazat)
Pokud provádíte načítání/ukládání souborů, potom při práci v
prostředí je aktuálním adresářem adresář zdrojových textů projektu
(ukol1, ukol2), při práci v konzole je aktuálním adresářem adresář
ve kterém je spouštěn exe soubor (Debug/Release v reseni).
Vepíšeme jednoduchý program (include stdio.h a tisk řetězce ve foru. V základní funkci main).
Pokud nad název hlavičkového souboru najedeme myší, můžeme ho pomocí pravého tlačítka otevřít.
V levé části okna je záložka ClassView, kde je možné sledovat proměnné (globální proměnné a funkce). Aktuálně je vidět jediná funkce a to funkce main (v sekci global functions ...). Poklikem na danou položku se dostaneme na její definici (zobrazí se nám a můžeme se do ní podívat).
V záložce, kterou jsme již viděli - SolutionExplorer, jsou zobrazeny soubory, které obsahuje projekt. Poklepnutím na ně se načtou a zobrazí.
Dopsaný program zkompilujte a spusťte. (viz zelená šipka v pravé horní části obrázku). Pokud potřebujete pouze spustit bez debugování a tak aby se okno nezavřelo a viděli jste výpisy, použijte StartWithoutDebugging (zelená prázdná šipka Ctrl+F5)
Pozn. Při překladu projektu na síťových discích nebo z důvodu zásahu antivirových programů může docházet k chybě. Tuto chybu je možné odstranit tak, že budeme projekt překládat se statickými knihovnami, nebo je nutné nastavit překlad bez vloženého manifestu. Nastavení tohoto přepínače v prostředí ukazuje obrázek – Properties -> ManifestTool -> InputAndOutput -> EmbedManifest -> NO..
U hlavního nápisu (název projektu) v okně SolutionExplorer (zobrazen bold) jde poklikem na pravé tlačítko zobrazit menu, kde lze v properties provést nastavení z nichž vybírám: general – typ překladu knihoven, tj. zabudování knihoven do exe souboru (statické knihovny) nebo pomocí DLL (dynamické knihovny). Debugging – command arguments -text, který je možné zadat na “dosovskou řádku” jako argumenty spuštění programu. Zapište sem něco a zkontrolujte, zda je to předáno jako v parametru funkce main. V C/C++ je možno přepínat úrovně warningů (upozornění) a nebo nastavit warningy ať se chovají jako errory (chyby) – bez ošetření nelze tedy přeložit. C/C++-> Preprocessor – globální symboly (místo #define SYMBOL dodávaného do každého modulu) pro řízený překlad, které jsou známé při překladu každého modulu . Linker – debugging, debug info, mapfile. V C/C++->CodeGeneration je položku runtimeLibrary kde je možné nastavit zda je projekt linkován proti dynamickým knihovnám (.NET). Vybraná nastavení lze provádět i pro jednotlivé části projektu (soubory – moduly).
Tlačítka na liště (buttony) – klik myší v levé části (šedý proužek) editoru – přepnutí breakpointu (bod na kterém se provádění programu zastaví). Zelená šipka – spuštění programu, kdy se zastavuje na break pointech (po skončení programu zavře okno výpisů). Build/compile – compile vytváří obj soubor z jednoho zdrojového a hledá v něm chyby z hlediska jazyka. Build/ReBuild vytvoří postupně obj ze všech zdrojových souborů v programu a poté provede link – vytvoření spustitelného exe souboru. (project je aktuální projekt, solution je soubor projektů). Build (na rozdíl od rebuild) překládá pouze položky jichž se dotýkají změny provedené od posledního překladu. Rebuild je vhodné dát v případě změny properties nebo v okamžiku, kdy přehráváme soubory projektu soubory měněnými mimo projekt.
Položku Build -> CleanSolution provede vymazání většiny kompilátorem vytvořených souborů (*.exe, *.obj ...), proto je vhodné ho použít pokud chcete celý projekt archivovat (uložit zálohu, poslat mailem (školní mail jakýkoliv archiv se soubory *.exe nedoručí z důvodu možného výskytu virů) ...).
V okně (dole) s překladem je vidět jen konečný souhrn (počet warningů a errorů). Dá se však zvětšit, či listovat nahoru a potom jsou vidět i konkrétní chyby s textem (protokol o překladu) – snažte se je přeložit a pochopit co říkají. Poklikem se dostaneme do příslušného místa na které řádek upozorňuje.
Ve funkci main zapněte breakpoint a spusťte program (spustí i překlad je-li to nutné) pro zastavování na breakpointech (zelená šipka F5).Program se zastavil na řádku, který se má teprve provést. Při zastavení se objeví okna autos a watch, ve kterých je možné sledovat proměnné a jejich hodnoty. V okně autos jsou aktuální “viditelné” proměnné, v okně watch ty proměnné, které si vybereme (lze je do okna přidávat a rušit jejich zobrazení). Je možné zde proměnné i přetypovávat, to je, že můžeme char zobrazit jako znak, nebo jako číslo (x,d,c nebo přímo (char), (int)...), nebo můžeme zobrazit i součet či součin proměnných. Přepnutí mezi zobrazením hexa a dekadickým lze i pomocí pravého tlačítka myši. Dále se objeví nová tlačítková lišta debug, která zobrazuje tlačítka pro pohyb v programu – skok na řádek, provést jednu instrukci, provést jednu funkci, vyskočit z funkce ... Při pohybu myši nad tlačítkem vidíme příslušné horké klávesy.
K ladění (debugging) programu lze používat společně s breakpointy následující volby – provádění programu až do breakpointu StartDebugging (zelená šipka plná), spuštění programu a zastavení v místě kurzoru RunToCursor (pravé tlačítko myši na daném řádku), místo na kterém se právě nacházíte najdete pomocí ShowNextStatement (žlutá šipka), breakpoint může být spojen s podmínkou (například zastavit až proměnná i>4). Pokud program chceme provádět po jednotlivých příkazech, můžeme zvolit StepOver (řádky s velkou šipkou – znamená to, že se provádí příkazy po jednom, funkce se provede jako celek), nebo StepInto (řádky s malou šipkou – provádí se příkazy po jednom, do funkcí se vstupuje). Je možné vyskočit z funkce do funkce, která ji volala (například provedeme-li nechtěně StepInto) a to pomocí StepOut (řádky s šipkou nahoru). V případě, že se trasování ubírá špatným směrem, je možné program ukončit pomocí StopDebugging (modrý čtvereček), v dalším kroku se začíná trasovat od počátku. Restart provede ukončení současného prováděného programu a spoustí program znovu od počátku (ten se zastaví na případném breakpointu).
Je možné se podívat i na strojový kód překladu – pravým tlačítkem myši klikněte v prostoru okna zdrojů a zvolte GoToDisassembly. Zde je možné nastavit pole, která se budou zobrazovat. Je vidět C originál a způsob převodu do asm. Tato volba funguje pouze pokud je daný program prováděn (=spuštěn a zastaven pomocí break).
Okna (variables, watch, debug ...) ( které se zobrazují podle mínění překladače), lze zapnout v Debug/Windows.
Buttony v horní liště lze definovat tak, že po stisknutí pravého tlačítka myši (které stiskneme na “podkladu” horního menu – tj.na horní liště v místě kde nejsou buttony) se objeví menu, ve kterém můžeme vypínat a zapínat zobrazované buttony.
Poslední úpravy 2011-09-19