fbpixel
Etiquetas:

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\

vscode-cpp-extension Programação em C++ com VS Code

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.

vscode-code-runner-extension Programação em C++ com VS Code

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é)

vscode-cpp-debug Programação em C++ com VS Code
vscode-cpp-run-code Programação em C++ com VS Code

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

vscode-navigate-breakpoint Programação em C++ com VS Code

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”.

vscode-cpp-debug-breakpoint Programação em C++ com VS Code

Resolução de problemas

  • “thread” não é reconhecido

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++.

  • A utilização de cout dá origem a um erro de segmentação

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.
  • O código de execução apresenta resultados diferentes do código de depuração

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