Vývojové prostředí

Abychom mohli přeložit a spustit nějaký program, musíme ho obvykle nejprve zapsat do jednoho nebo více souborů ve formě tzv. zdrojového kódu (source code). K usnadnění tohoto procesu existují textové editory a vývojová prostředí jako například MS Visual Studio, QtCreator, JetBrains CLion, CodeBlocks, Visual Studio Code, vim, emacs apod. Tyto programy usnadňují psaní kódu pomocí zvýrazňování syntaxe, automatizace překladu, spouštění a testování programů a také správy projektů.

Na cvičeních UPR budeme používat editor Visual Studio Code, který je dostupný zdarma. Níže je stručný návod k jeho použití. Při programování se hodí detailně znát a efektivně využívat editor, který používáte, ale pro začátek nám budou stačit naprosté základy.

Instalace VSCode

  • Pokud používáte virtualizovaný nebo nativní Linux (Ubuntu), stáhněte si odsud .deb soubor s balíčkem VSCode a nainstalujte jej (poklikáním myši na soubor nebo spuštěním příkazu

    $ sudo apt install ./<nazev-souboru>.deb
    
  • Pokud používáte WSL, tak by už měl být VSCode předinstalovaný1. Spustíte ho tak, že v bash terminálu spustíte tento příkaz:

    1Pokud by tomu tak nebylo, návod na instalaci VSCode na Linuxu naleznete zde.

    $ code .
    

    Ten otevře VSCode v adresáři, ve kterém se zrovna v terminálu budete nacházet. Ve VSCode si poté také nainstalujte dodatečné rozšíření Remote Development (viz návod, jak instalovat rozšíření níže).

    Podrobný návod, jak zprovoznit VSCode v kombinaci s WSL, naleznete zde nebo zde.

Chybějící hlavičkové soubory

Pokud spustíte VSCode, otevřete v něm nějaký program s C kódem a budete mít červeně podtržený např. takovýto řádek:

#include <stdio.h>

tak je to pravděpodobně způsobeno jednou z dvou následujících věcí:

  1. Spouštíte VSCode z Windows a ne z Ubuntu WSL terminálu. Spouštějte VSCode vždy přímo z Ubuntu terminálu, aby mělo správný přístup k systémovým souborům jazyka C. Viz VSCode na WSL.
  2. Nemáte nainstalovaný překladač (gcc). Spusťte Ubuntu terminál a nainstalujte jej, viz překlad programu.

Obecně řečeno, to, že se vám ve VSCode ukazuje nějaký problém s kódem, ještě neznamená, že tento problém v kódu opravdu je. Důležité je, co řekne překladač při překladu programu, VSCode je občas zmatené anebo není správně nastavené. Samozřejmě je ale ideální si ho správně nastavit, ať vás to neplete.

Instalace potřebných rozšíření (pomocí terminálu)

VSCode podporuje programovací jazyky pomocí rozšíření, po první instalaci VSCode tak nejprve musíme nainstalovat potřebná rozšíření pro jazyk C. V terminálu spusťte tyto příkazy:

$ code --install-extension ms-vscode.cpptools

Instalace potřebných rozšíření (pomocí uživatelského rozhraní)

  1. Spusťte Visual Studio Code
  2. Otevřete obrazovku rozšíření (Ctrl+Shift+X nebo spusťte akci Install Extensions)
  3. Vyhledejte rozšíření (C/C++) a nainstalujte jej

Ukázka nastavení projektu

Jako vzorový projekt můžete použít tuto šablonu. Pro otevření adresáře ve VSCode klikněte na Soubor (File) -> Otevřít adresář (Open Folder) a vyberte nějaký adresář, ve kterém chcete programovat.

Nastavení VSCode

Ukládání souborů

Pokud v otevřeném zdrojovém souboru provedete nějaké změny, tak se neuloží na disk, dokud soubor neuložíte (pomocí klávesové zkratky Ctrl + S). Občas se studentům stává, že provedou změnu, poté se snaží přeložit program, ale jejich změny se neprojeví a studenti nerozumí, proč tomu tak je. Často je to právě proto, že soubor není uložen! Neuložený soubor poznáte tak, že v záložce s názvem souboru je bílé kolečko:

Vždy tak po provedení změn ukládejte soubor pomocí Ctrl + S, případně si můžete v nastavení (Settings) zapnout volbu Auto Save.

Automatické formátování kódu

Pokud s programováním začínáte, tak budete ze začátku nejspíše trochu bojovat s tím, jak zformátovat zdrojový kód, aby byl přehledný a dalo se v něm vyznat. Tuto činnost však můžete nechat plně na editoru či vývojovém prostředí. Ve Visual Studio Code můžete použít klávesovou zkratku Ctrl + Shift + I, která vám právě otevřený soubor s kódem automaticky zformátuje.

Můžete si dokonce editor nastavit tak, aby po každém uložení souboru kód automaticky zformátoval. Klikněte na File -> Preferences -> Settings, poté do vyhledávacího okénka napište Format On Save a zaškrtněte tuto možnost:

Pokročilé možnosti nastavení projektu

Pokud byste si chtěli nastavit VSCode tak, aby překládal nebo spouštěl váš program s jiným, než základním nastavením, můžete k tomu využít konfiguraci pomocí souborů launch.json, který definuje, jak bude VSCode váš program spouštět, případně tasks.json, pomocí kterého můžeme nastavit, jak se bude program překládat.

launch.json je možno vytvořit po kliknutí na záložku Run and Debug (Ctrl+Shift+D) a poté na tlačítko create a launch.json file (tlačítko se zobrazí, pokud máte otevřený C soubor ve VSCode). Soubor se vytvoří v současně otevřeném adresáři, ve složce .vscode (můžete ho případně i vytvořit manuálně).

Do vygenerovaného souboru můžete zkopírovat tento obsah:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "C program (gdb) Launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/main",
            "args": [],
            "cwd": "${workspaceFolder}",
            "MIMode": "gdb",
            "miDebuggerPath": "/usr/bin/gdb",
            "preLaunchTask": "C compile",
        }
    ]
}

Atributy této konfigurace poté můžete upravovat. Užitečné pro vás budou zejména tyto atributy:

  • program - cesta ke spustitelnému (přeloženému) souboru, který bude konfigurace spouštět
  • cwd - pracovní adresář, ve kterém se program spustí
  • args - argumenty příkazového řádku předané spouštěnému programu

Pokud byste si chtěli při ladění přesměrovat obsah souboru na standardní vstup programu, tak přidejte na konec args šipku doleva a cestu k souboru, který chcete přesměrovat na vstup:

"args": [
    "<",
    "${workspaceFolder}/stdin_file.stdin"
]

Dále budete muset nastavit soubor tasks.json, pro automatický překlad programu (vytvořte jej opět ve .vscode složce projektu). Pokud tento soubor bude chybět, při pokusu o ladění programu dostanete chybovou hlášku podobnou této:

launch: program <cesta>/main does not exists

Do tasks.json si můžete zkopírovat tento obsah:

{
    "version": "2.0.0",
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C compile",
            "command": "gcc",
            "args": [
                "${workspaceFolder}/main.c",
                "-o",
                "${workspaceFolder}/main"
            ]
        }
    ]
}

Zde jsou důležité hlavně dva atributy:

  • label - název tasku pro spuštění. Tento název musí odpovídat atributu preLaunchTask v souboru launch.json.
  • args - parametry překladače použité při překladu.
    • Prvním argumentem by měla být cesta k překládanému C zdrojovému souboru.
    • Dále by v args měla být cesta k výslednému přeloženého souboru, předaná za parametrem -o. Tato cesta musí odpovídat atributu program v souboru launch.json.
    • Dále zde můžete předávat další parametry překladače, např. zapnout Address sanitizer (-fsanitize=address) nebo přilinkovat nějaké knihovny (např. -lm).

Více informací o možnostech nastavení těchto dvou souborů můžete naleznout na těchto odkazech:

Užitečné zkratky

  • Spustit program - F5
  • Naformátovat kód - Ctrl + Shift + I
  • Uložit provedené změny v souboru - Ctrl + S
  • Zobrazit vyhledávač akcí - Ctrl + Shift + P