Site icon AranaCorp

Programação em C++ com VS Code

Instalar e configurar o VS Code

Se ainda não o tiver feito, transfira e instale o Visual Studio Code

Instalar a extensão C\

Instalação da extensão Code Runner: esta extensão é opcional, mas permite-lhe executar o código num terminal externo para utilizar a entrada do utilizador (cin). Nas definições, active a opção Code-runner: Run In Terminal.

Instalar um compilador

Para compilar, executar e analisar o seu código, precisará de ferramentas como o GNU.

Descarregue e descomprima uma versão do GNU Compiler Collection (GCC) se ainda não estiver no seu computador.

g++ --version

Também é possível instalar uma versão do GCC a partir do MSYS2

$ pacman -S mingw-w64-ucrt-x86_64-gcc

Crie o seu projeto C++

Uma vez instaladas as várias extensões, pode criar o seu projeto C++. Para isso, basta criar uma pasta, abrir o VS Code nessa pasta e criar um ficheiro .cpp. Pode fazê-lo através da interface do VS Code ou a partir da linha de comandos

mkdir myproject
cd myproject
code .

Copie o código Hello world para o ficheiro de origem.

#include <iostream>

int main()
{
    std::cout << "Hello World" << std::endl;
    return 0;
}

Compilar e testar o seu programa

Pour lancer le code vous pouvez utiliser le menu Run > Start Debugging (F5) qui lancera le programme dans la console de debug ou faire un clique-droit sur l’éditeur et lancer Run Code (Ctrl+Alt+N) qui le lancera dans le terminal (si Code runner est activé)

Também pode fazer isto na linha de comandos a partir do terminal

g++ helloworld.cpp # -> a.exe executabl. compile and link
./a.exe # execute file
g++ -S helloworld.cpp # -> helloworld.s assembly source file. compile
g++ -c helloworld.cpp # -> helloworld.o object file. compile and assemble

Adicionando uma biblioteca C++ externa ao VS Code

Pode adicionar bibliotecas externas ou criar as suas próprias bibliotecas. Para que o VS Code compile as bibliotecas com o programa, é necessário especificar o caminho de acesso no ficheiro tasks.json (por exemplo,”–include=include/utils.cpp”)

{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: g++.exe build active file",
            "command": "C:\\MinGW\\bin\\g++.exe",
            "args": [
                "-fdiagnostics-color=always",
                "-g",
                "${file}",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe",
                "--include=include/utils.cpp",
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "Task generated by Debugger."
        }
    ],
    "version": "2.0.0"
}

para compilar o programador, é necessário compilar e ligar os dois ficheiros

g++ helloworld.cpp include/utils.cpp -o helloworld
# or
g++ -c helloworld.cpp include/utils.cpp # get object files
g++ -o helloworld.exe helloworld.o include/utils.o
./helloworld.exe #run program

Medição do tempo de execução do programa

Um método bastante simples de medir o tempo de execução de um programa é usar a biblioteca time.h e medir o tempo decorrido entre o início e o fim do programa.

Para testar o tempo de execução, criamos uma função que conta de 0 a n com um certo atraso entre cada iteração.

void count_to(int n = 10, int delay = 0);
#include <iostream>
#include <windows.h>
//#include <unistd.h>

void count_to(int n, int delay)
{
    for (int i=0;i<=n;i++){
        std::cout << i << std::endl;
        Sleep(delay);
    }
}

Em seguida, no código principal, medimos o tempo antes e depois da execução da função count_to()

#include <iostream>
#include <time.h>
#include "include/utils.h"

clock_t start, end;
double cpu_time_used;

int main()
{
    std::cout << "Hello World" << std::endl;

    start = clock();
    
    count_to(10,100);

    end = clock();
    cpu_time_used = ((double) (end - start)) / CLOCKS_PER_SEC;
    printf("Execution time: %f seconds\n", cpu_time_used);

    return 0;
}

A consola apresenta o seguinte resultado

Hello World
0
1
2
3
4
5
6
7
8
9
10
Execution time: 1.180000 seconds

Utilizar a ferramenta de depuração do VS Code

A função Executar e Depurar permite-lhe executar o código passo a passo, colocando pontos de paragem em diferentes pontos do código (identificados à esquerda do número da linha por um ponto vermelho). Também lhe permite observar as variáveis e os registos à medida que são executados. Isto permite-lhe seguir o progresso do código passo a passo em busca de quaisquer erros.

O código será executado normalmente até ao primeiro ponto de interrupção, após o qual pode continuar a progressão para o ponto de interrupção seguinte ou executar o código passo a passo a partir desse ponto, utilizando os botões de navegação

Pode observar os valores das variáveis ou registos em cada passo no separador VARIABLES. Ou observar determinadas variáveis em WATCH.

Também pode visualizar o código de montagem compilado abrindo a vista de “desmontagem”, clicando com o botão direito do rato no editor e selecionando “Abrir vista de desmontagem”.

Resolução de problemas

tente instalar o MinGW-w64 a partir do MSYS2 e adicione C:\msys64\ucrt64\bin às variáveis de ambiente. Verifique se o compilador utilizado é o g++.

Como solução intermédia, pode substituir o custo por printf

verifique se a biblioteca libstdc++-6.dll está no mesmo local que o compilador utilizando a consola de depuração do código vs

Loaded 'C:\Program Files\Tesseract-OCR\libstdc++-6.dll'. Symbols loaded.
#instead of
Loaded 'C:\msys64\ucrt64\bin\libstdc++-6.dll'. Symbols loaded.

Certifique-se de que os comandos são os mesmos para ambas as funções (para mim, o flage “-g” foi um problema).

no ficheiro tasks.json (depurar)

//
            "command": "C:\\msys64\\ucrt64\\bin\\g++.exe",
            "args": [
                "-fdiagnostics-color=always",
                "-g",
                "${file}",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe"
            ],

no ficheiro de definições (código do corredor)

   "code-runner.executorMap": {

        "cpp": "cd $dir && g++ -g $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",

    },

Fontes

Exit mobile version