Avançar para o conteúdo
Imagem com logotipo, contendo link para a página inicial
  • United Stated of America flag, representing the option for the English language.
  • Bandeira do Brasil, simbolizando a opção pelo idioma Português do Brasil.

Ambientes de Desenvolvimento: Configuração para Programação em C++

Exemplos de programação em linguagem C++. Na parte esquerda da imagem, um programa escrito em C++ após compilação e execução no KDevelop. Na parte direita, o mesmo programa após compilação e execução usando Qt Creator.

Créditos para a imagem: Imagem criada pelo autor usando o programa Spectacle.

Pré-Requisitos

A configuração de ambiente para começar a programar em C++ é praticamente a mesma usada para a linguagem C. Assim, ao invés de repetir o conteúdo, pode-se encontrar instruções neste link para configurar o ambiente para a linguagem C. A opção mais simples para iniciantes continua a ser o uso de um IDE. Uma boa opção é Code::Blocks.

Após instalar o compilador ou um Ambiente Integrado de Desenvolvimento (em inglês, Integrated Development Environment ou IDE), retorne para esta página para os primeiros testes com C++.

Uma das maiores diferenças para a compilação é que, em algumas distribuições Linux, deve-se instalar o compilador g++ ao invés (ou além de) de gcc. Em outras, gcc inclui g++.

Na realidade, g++ é parte do gcc. gcc é uma sigla para GNU Compiler Collection, ou compilação de Compiladores GNU. A coleção inclui compiladores para várias linguagens, como C, C++, Objective-C, D, Fortran, Ada, e Go.

Assim, é possível compilar código C++ em alguns sistemas operacionais usando gcc. Em alguns casos, basta que o arquivo tenha extensão .cpp ao invés de .c.

C++ Como Primeira Linguagem de Programação

Python e Lua lideram a minha lista de recomendações de linguagens de programação para iniciantes, como comentado na introdução sobre ambientes de desenvolvimento; a terceira opção é JavaScript, devido à Internet.

A linguagem C está distante na minha lista de recomendações para iniciantes. C++ está tão (ou ainda mais) distante que C.

A razão é que C++ é uma linguagem mais complexa que C, mas possui uma biblioteca padrão superior e com menos surpresas (e menor potencial para erros). Em particular, o fato de C++ possuir um tipo de dados (como uma classe) para manipulação de cadeias de caracteres, coleções para estruturas de dados, facilidades para alocação e liberação de memória, e sobrecarga de operadores torna algumas operações mais simples que em C. Contudo, C++ é uma linguagem sintaticamente mais complexa que C.

De fato, a gramática da linguagem C++ permite escrever programas sintaticamente válidos que não podem ser compilados (um exemplo e outro exemplo mais complexo). Assim, é possível sugerir que C++ seja uma linguagem desnecessariamente complexa para o aprendizado de programação.

No mais, as considerações feitas para o uso de C como primeira linguagem de programação valem para C++.

Em suma, caso se possa escolher, recomendo começar com Python, Lua ou JavaScript. Foque no aprendizado de conceitos, de lógica de programação e de pensamento computacional. Retorne para C++ quando tiver experiência. O aprendizado de C++ provavelmente será mais simples e produtivo caso já se entenda o básico.

Sobre C++

C++ compartilha muitas das vantagens de desvantagens de C, além de adicionar outras para ambas as categorias. Assim, muitos dos comentários feitos em Sobre C também são relevantes para C++.

Assim como C, C++ é uma linguagem compilada, e de alto desempenho e eficiência, caso usada corretamente. Contudo, C++ é mais difícil de ser usada corretamente que C, pois ser uma linguagem mais complexa. Enquanto C é uma linguagem simples quanto a recursos, C++ é uma linguagem multi-paradigma, algo que permite escolher diferentes formas para se programar na linguagem. É possível, inclusive, que duas pessoas que programem em C++ façam uso de recursos totalmente diferentes da linguagem. Como resultado, cada qual pode usar recursos que a outra talvez não conheça.

O nível de C++ acompanha C em baixo e médio nível (incluindo a possibilidade de inclusão de código assembly), mas também permite programar em nível mais alto (inclusive em paradigmas como Orientação a Objetos e Funcional).

A linguagem é uma boa escolha para vários dos casos de uso de C: sistemas operacionais, compiladores, interpretadores, sistemas e bibliotecas que requeiram alto desempenho. Por outro lado, C++ nem sempre é uma boa escolha para sistemas embarcados (embora existam diretivas (MISRA) para uso da linguagem).

Em particular, C++ é a linguagem adotada para a escrita de muitos motores (game engines) para jogos digitais e videogames. Existem jogos que utilizam C++ em conjunto com uma linguagem de scripting. Partes que requeiram maior eficiência são comumente escritas em C++. Partes que admitam menor eficiência podem ser escritas em outras linguagens, como Lua.

Para programação em nível avançado, uma diferença significativa entre C e C++ é o código de máquina gerado pelo compilador. Enquanto o código gerado por C pode próximo do código-fonte, o código gerado por C++ pode ser bastante diferente (muito depende dos recursos utilizados para a programação).

Para documentação de C++, pode-se usar os seguintes recursos:

Versões

C++ teve um ressurgimento ainda maior que C nos últimos anos, inclusive com uma modernização para recursos, funcionalidades e bibliotecas da linguagem.

A padronização inicial da linguagem ocorreu em 1998, com revisões em 2003 (C++03). O comitê de C++ previa um novo padrão antes do final da década de 2010; contudo, a conclusão ocorreu em 2011 (C++11).

O padrão C++11 modernizou significativamente a linguagem, adicionando recursos presentes em linguagens de nível mais alto, como Python. A evolução continua em ritmo acelerado, com os novos padrões C++14, C++17, e, atualmente, C++20. Espera-se a publicação do próximo padrão em 2023 (C++23).

Contudo, é importante notar que cada compilador possui um ritmo para a disponibilização das novas funcionalidades. Para uma tabela comparativa, pode-se consultar cppreference.com .

Além disso, existem compiladores que requerem o uso de flags (valores que indicam um estado ou a ocorrência de uma condição) específicos para habilitar funcionalidades modernas. Assim, caso a compilação falhe em um compilador que deveria fornecer o recurso empregado, verifique se existe a necessidade de usar uma flag para ativar a funcionalidade.

Considerações Adicionais

Todas as informações fornecidas para a linguagem C em Compiladores e Programas valem para C++.

Cross-compilation, ligações (link e linker), diretórios para bibliotecas e cabeçalhos, e sistemas de construção funcionam da mesma forma. Caso se use g++, normalmente basta substituir o termo gcc por g++ e código-fonte C por código-fonte C++ que os parâmetros serão os mesmos.

Assim, C++ não simplifica o processo de compilação em C. Na realidade, alguns compiladores C++ tornam o processo mais complexo, devido a Application Binary Interface (ABI; algo como interface binária de aplicação) e name mangling.

Existem compiladores (particularmente o MSVC até meados de 2014) que geram binários incompatíveis entre diferentes versões do mesmo compilador para um mesmo código-fonte. Quando isso ocorre, é necessário compilar todas as bibliotecas e dependências com a versão exata do compilador que será utilizada por todo o projeto.

Felizmente, a situação de MSVC melhorou por volta de 2015, algo que simplifica a migração para novas versões compilador e do IDE Visual Studio.

Compilador e Editor de Texto

Para a instalação de um compilador, acesse Compilador e Editor de Texto na página sobre configuração de ambientes para C.

Linux

Acesso rápido para instalação de compilador para C++ em Linux.

A instalação é similar, basta seguir as indicações para instalar g++ em distribuições Linux nas quais gcc não incluir o compilador para C++ por padrão.

macOS

Acesso rápido para instalação de compilador para C++ em macOS.

Windows

Acesso rápido para instalação de compilador para C++ em Windows.

Teste de Ambiente

Com o compilador (ou IDE com um compilador) instalado, pode-se começar a programar em C++. Para usar o compilador, execute o arquivo executável obtido ou digite g++ (o nome pode variar no Windows, dependendo da instalação; por exemplo, ele pode ser mingw) em um interpretador de linha de comando (requer configuração de PATH para arquivos baixados manualmente; clique aqui para informações para como configurá-lo).

Como feito para JavaScript, Python e Lua, esta seção apresentará os mesmos exemplos para fins de teste e comparações entre linguagens.

Para começar, pode-se criar um arquivo com o seguinte conteúdo (std::cout é um objeto que permite escrever texto no console -- documentação; std::endl permite adicionar uma quebra de linha -- documentação):

#include <iostream>

int main()
{
    std::cout << "Olá, meu nome é Franco!" << std::endl;
    // Caso não queira usar std::endl, você pode fazer:
    // std::cout << "Olá, meu nome é Franco!" << '\n';
    // Ou ainda:
    // std::cout << "Olá, meu nome é Franco!\n";
    // Usar `\n` ao invés de std::endl pode resultar em
    // melhor desempenho para o programa.

    return 0;
}

Escolha um nome para o arquivo (por exemplo, ola.cpp) e prepare-se para compilá-lo:

g++ ola.cpp -o ola.exe

O resultado será um programa chamado ola.exe, na forma de um arquivo executável. Para uma melhor integração, escolha (ou omita) a extensão de acordo com o seu sistema operacional:

  1. Linux:

    g++ ola.cpp -o ola
  2. Windows (escolha entre g++ ou mingw, dependendo da instalação):

    g++ ola.cpp -o ola.exe
  3. macOS:

    g++ ola.cpp -o ola

Para executar seu programa:

  1. Linux:

    ./olaOlá! Meu nome é Franco.
  2. Windows:

    # Para uso no `cmd.exe`:
    ola.exeOlá! Meu nome é Franco.

    Se estiver usando MSYS2 com bash ao invés de cmd, o processo será como no Linux, ou seja, executa-se o programa com ./ola.exe:

    # Para uso no `MSYS2`:
    ./ola.exeOlá! Meu nome é Franco.
  3. macOS:

    ./olaOlá! Meu nome é Franco.

Erro: Stray Character in Program

Trata-se do mesmo problema explicado para a linguagem C. Para resolvê-lo, siga os mesmos passos.

Onde Estão os Acentos?

Exemplo de usos de acentos em um terminal no Windows. O resultado contém símbolos estranhos ao invés de caracteres acentuados.

Novamente, trata-se do mesmo problema explicado para a linguagem C. A explicação é a mesma (deve-se configurar o locale), mas a solução depende do sistema operacional e do compilador utilizado.

Como em C, o valor correto para locale pode variar. Assim, deve-se escolher uma única linha com a declaração para LOCALE nos exemplos a seguir. Por exemplo, const char LOCALE[] = "Portuguese_Brazil.1252"; possivelmente funcionará em Windows. Já const char LOCALE[] = "pt_BR.UTF-8"; possivelmente funcionará em Linux. Caso seu sistema operacional esteja em Português, o mais simples é manter a opção padrão: const char LOCALE[] = "";. O valor vazio ("") utiliza o idioma escolhido para locale do sistema operacional.

Em C++, deve-se configurar locale usando-se:

A próxima parte é dependente do sistema operacional. Caso se use Linux, a solução é similar a C.

#include <iostream>
#include <locale>

// "" Padrão do sistema operacional.
const char LOCALE[] = "";
// Caso o padrão não funcione, tente (valores variam entre sistemas operacionais):
// const char LOCALE[] = "pt_BR.utf8";
// const char LOCALE[] = "pt_BR.UTF8";
// const char LOCALE[] = "pt_BR.UTF-8";
// const char LOCALE[] = "Portuguese";
// const char LOCALE[] = "Portuguese_Brazil.1252";
// const char LOCALE[] = "pt_BR";
// const char LOCALE[] = "pt-BR";
// const char LOCALE[] = "pt";

int main()
{
    std::setlocale(LC_ALL, LOCALE);
    std::locale::global(std::locale(LOCALE));
    std::cout.imbue(std::locale(LOCALE));

    // Em seguida, escreve-se o texto desejado.
    std::cout << "Olá, meu nome é Franco!" << std::endl;

    return 0;
}

Caso se use Windows, a situação é mais complicada.

O suporte para UTF-8 em Windows está em andamento. Existe uma opção para configuração de todo o sistema chamada Beta: Use Unicode UTF-8 for worldwide language support. Entretanto, por se tratar de algo para testes, o uso pode ser instável.

Assim, a alternativa é depende de suportes de compiladores para a codificação Portuguese_Brazil.1252.

No Visual Studio 2019 com MSVC, a solução é similar a usada em Linux:

#include <iostream>
#include <locale>

// "" Padrão do sistema operacional.
const char LOCALE[] = "";
// Caso o padrão não funcione, tente (valores variam entre sistemas operacionais):
// const char LOCALE[] = "pt_BR.utf8";
// const char LOCALE[] = "pt_BR.UTF8";
// const char LOCALE[] = "pt_BR.UTF-8";
// const char LOCALE[] = "Portuguese";
// const char LOCALE[] = "Portuguese_Brazil.1252";
// const char LOCALE[] = "pt_BR";
// const char LOCALE[] = "pt-BR";
// const char LOCALE[] = "pt";

int main()
{
    std::setlocale(LC_ALL, LOCALE);
    std::locale locale = std::locale(LOCALE);
    std::locale::global(locale);
    std::cout.imbue(locale);

    std::printf("Olá, meu nome é Franco!\n");
    std::cout << "Olá, meu nome é Franco!" << std::endl;

    return 0;
}
Exemplo de usos de acentos no Visual Studio (compilador `MSVC`) com locale configurado para Português do Brasil.

O mingw (gcc / g++), contudo, aceita apenas os valores "", "C", e "POSIX" para locale em sistemas Windows. Embora seja possível obter o valor correto para a locale (por exemplo Portuguese_Brazil.1252), não parece ser possível utilizar o valor para configurar std::locale::global() e std::cout.imbue().

Exemplo de usos de acentos no Code::Blocks (compilador `mingw`) sem locale configurado, mas com texto escrito em Português do Brasil.

setlocale() de C funciona corretamente em C++, caso se queira usar printf(). Usar std::cout com acentos, por outro lado, pode não funcionar. Caso se usar apenas std::setlocale(), a acentuação pode funcionar, mas seria mais correto também fazer as duas outras configurações.

#include <iostream>
#include <locale>

// "" Padrão do sistema operacional.
const char LOCALE[] = "";
// Caso o padrão não funcione, tente (valores variam entre sistemas operacionais):
// const char LOCALE[] = "pt_BR.utf8";
// const char LOCALE[] = "pt_BR.UTF8";
// const char LOCALE[] = "pt_BR.UTF-8";
// const char LOCALE[] = "Portuguese";
// const char LOCALE[] = "Portuguese_Brazil.1252";
// const char LOCALE[] = "pt_BR";
// const char LOCALE[] = "pt-BR";
// const char LOCALE[] = "pt";

// Além de "", apenas as opções abaixo são válidas para std::locale::global() e
// std::cout.imbue() para g++ no Windows:
// const char LOCALE[] = "POSIX";
// const char LOCALE[] = "C";

int main()
{
    // OK.
    std::cout << std::setlocale(LC_ALL, "") << std::endl;
    // Incorreto: retorna "C".
    std::cout << std::locale("").name().c_str() << std::endl;

    // OK.
    setlocale(LC_ALL, "");
    printf("Olá, meu nome é Franco!\n");

    std::cout << std::locale("").name() << '\n';

    // OK.
    std::setlocale(LC_ALL, LOCALE);
    // Problema: apenas os valores "", "C" e "POSIX" são válidos.
    // "" como padrão utiliza "C", impedindo o uso de acentuação.
    // std::locale locale = std::locale(LOCALE);
    // std::locale::global(locale);
    // std::cout.imbue(locale);

    std::printf("Olá, meu nome é Franco!\n");
    std::cout << "Olá, meu nome é Franco!" << std::endl;

    return 0;
}
Exemplo de usos de acentos no Code::Blocks (compilador `mingw`) com locale configurado para Português do Brasil.

Existem alternativas como a biblioteca International Components for Unicode (ICU). Contudo, o uso de bibliotecas externas adiciona passos adicionais que são desnecessários para iniciantes.

No futuro, talvez os valores para MSVC valham para mingw.

Todavia, neste momento, é mais simples conviver com os caracteres incorretos (ou não escrevê-los) caso a acentuação não funcione com std::cout a usar printf() em C++ em atividades de aprendizado. Para iniciantes, é mais simples usar std::cout em C++ que printf(), pois std::cout não requer parâmetros para conversões nem o uso de métodos específicos para impressão (por exemplo, para cadeias de caracteres).

De Volta aos Testes

Após a questão dos acentos, pode-se criar o segundo arquivo com código-fonte em C++ para continuar a tradição das linguagens anteriores. Como em C, não será exatamente o programa, mas o nome proposto para o arquivo será primeiro-programa.cpp. Você pode alterá-lo, desde que também altere o nome na linha usada para compilação. Caso o nome de arquivo escolhido tenha espaços, escreva o parâmetro do compilador entre aspas (por exemplo, como g++ "Nome com Espaços.cpp" -o "Meu Programa.exe").

#include <iostream>
#include <locale>

// "" Padrão do sistema operacional.
const char LOCALE[] = "";
// Caso o padrão não funcione, tente (valores variam entre sistemas operacionais):
// const char LOCALE[] = "pt_BR.utf8";
// const char LOCALE[] = "pt_BR.UTF8";
// const char LOCALE[] = "pt_BR.UTF-8";
// const char LOCALE[] = "Portuguese";
// const char LOCALE[] = "Portuguese_Brazil.1252";
// const char LOCALE[] = "pt_BR";
// const char LOCALE[] = "pt-BR";
// const char LOCALE[] = "pt";

int main()
{
    std::setlocale(LC_ALL, LOCALE);
    std::locale::global(std::locale(LOCALE));
    std::cout.imbue(std::locale(LOCALE));

    std::cout << "Meu Primeiro Programa em C++" << std::endl;
    std::cout << "Olá! Meu nome é Franco." << std::endl;
    std::cout << "O programa saber fazer contas." << std::endl;
    std::cout << "Veja só: " << 1 + 1 << std::endl;
    std::cout << "Tchau!" << std::endl;

    return 0;
}

Para compilar e executar seu programa:

  1. Linux:

    g++ primeiro-programa.cpp -o primeiro-programa./primeiro-programaMeu Primeiro Programa em C++
    Olá! Meu nome é Franco.
    O programa saber fazer contas.
    Veja só: 2
    Tchau!
  2. Windows (se estiver usando MSYS2 com bash ao invés de cmd, o processo será como no Linux, ou seja, executa-se o programa com ./primeiro-programa.exe):

    g++ primeiro-programa.cpp -o primeiro-programa.exeprimeiro-programa.exeMeu Primeiro Programa em C++
    Olá! Meu nome é Franco.
    O programa saber fazer contas.
    Veja só: 2
    Tchau!
  3. macOS:

    g++ primeiro-programa.cpp -o primeiro-programa./primeiro-programaMeu Primeiro Programa em C++
    Olá! Meu nome é Franco.
    O programa saber fazer contas.
    Veja só: 2
    Tchau!

Parabéns! Se você chegou até aqui, agora você entende como um IDE compila e executa programas por trás das cenas. A próxima seção mostra como IDEs tornam o processo mais simples, especialmente para iniciantes.

IDEs

As recomendações de IDE para C++ são exatamente as mesmas feitas para C. Instruções de uso e configuração também são idênticas.

Assim, para evitar repetições desnecessárias, instruções e comentários estão na página sobre configuração de ambiente de desenvolvimento para C.

Code::Blocks

Acesso rápido: Code::Blocks.

Code::Blocks é uma boa opção para iniciantes.

Dev-C++

Acesso rápido: Dev-C++.

KDevelop

Acesso rápido: KDevelop.

Qt Creator

Acesso rápido: Qt Creator.

Visual C++ / Visual Studio

Acesso rápido: Visual Studio.

Xcode

Acesso rápido: Xcode.

Outras Opções

Existem várias outras opções de IDEs para C e C++, dentre as quais é possível citar:

Primeiros Passos para Começar a Programar em C++

Os trechos de código a seguir ilustram alguns recursos da linguagem C++. Neste momento, não é necessário entendê-los totalmente; o propósito é apresentar recursos e a sintaxe da linguagem.

Existem duas formas de usar o código. Você pode:

  1. Escrever e executar o código no IDE de sua escolha;
  2. Escrever o código usando um editor de texto, gerar um programa usando o arquivo com o código em um compilador, e executar o programa gerado em seu computador.

A forma mais simples e rápida é usar um IDE.

Os exemplos são os mesmos adotados para JavaScript. Logo, você poderá comparar linguagens, e observar semelhanças e diferenças entre elas.

Conhecendo C++ por Meio de Experimentação

Exemplos de uso e saídas dos trechos de código apresentados nesta seção utilizando o compilador `g++` para gerar programas escritos em linguagem C++ na linha de comando. A saída são os resultados da execução dos programas no interpretador `zsh` usando `Konsole` em Linux.
  1. Escrita de texto:

    // g++ 1.cpp -o p1
    #include <iostream>
    
    int main()
    {
        std::cout << "Uma linha." << std::endl;
        std::cout << "Outra linha." << std::endl;
        std::cout << "Uma linha.\nOutra linha." << std::endl;
    
        return 0;
    }

    Para compilar e executar sem um IDE, crie um arquivo chamado 1.cpp com o conteúdo anterior e digite:

    g++ 1.cpp -o p1
    ./p1

    Você pode escolher outro nome para o arquivo de código-fonte (.cpp) e para o executável a ser compilado. Nos próximos exemplos, a linha de compilação estará comentada na primeira linha do código-fonte.

    Caso você não queira criar um arquivo para cada exemplo, você pode apagar o conteúdo e escrever o código do próximo exemplo. Caso você queira armazenar uma cópia cada exemplo, (neste momento) é necessário criar arquivos individuais.

  2. Comentários (texto ignorado pelo compilador; documentação):

    // g++ 2.1.cpp -o p2.1
    #include <iostream>
    
    int main()
    {
        std::cout << "Compilador processa" << std::endl; // Compilador ignora.
    
        return 0;
    }
    // g++ 2.2.cpp -o p2.2
    int main()
    {
        /* <- Aqui começa o comentário.
           Ele pode ter várias linhas.
        Aqui ele termina -> */
    
        return 0;
    }
    // g++ 2.3.cpp -o p2.3
    int main()
    {
        /* Ele também pode começar e terminar na mesma linha. */
    
        return 0;
    }
    // g++ 2.4.cpp -o p2.4
    int main()
    {
        // Contudo, para isso, é mais fácil usar este estilo de comentário.
    
        return 0;
    }
  3. Cálculos matemáticos:

    • Soma, subtração, multiplicação e divisão (documentação):

      Em C++, divisão de dois números inteiros resulta em um número inteiro (o resto é truncado). Para fazer uma divisão real, ao menos um dos números deve ser real. Por exemplo, compare os valores das divisões 6 / 4 e 6 / 4.0.

    // g++ 3.1.cpp -o p3.1
    #include <iostream>
    
    int main()
    {
        std::cout << 1 + 1 << std::endl;
        std::cout << 2 - 2 << std::endl;
        std::cout << 3 * 3 << std::endl;
        std::cout << 4 / 4.0 << std::endl; // O que ocorre caso se tente dividir por 0? Faça o teste!
    
        return 0;
    }
    • Expressões matemáticas:

    // g++ 3.2.cpp -o p3.2
    #include <iostream>
    
    int main()
    {
        std::cout << 1 + 2 - 3 + (4 * 5) / 6.0 << std::endl;
    
        return 0;
    }

    // g++ 3.3.cpp -lm -o p3.3
    #include <iostream>
    #include <cmath>
    
    int main()
    {
        std::cout << std::pow(5, 2) << std::endl;
    
        return 0;
    }

    // g++ 3.4.cpp -lm -o p3.4
    #include <iostream>
    #include <cmath>
    
    int main()
    {
        std::cout << std::sqrt(25) << std::endl;
    
        return 0;
    }
    • Operações trigonométricas, como seno (documentação: sin() e M_PI):

    // g++ 3.5.cpp -lm -o p3.5
    #include <iostream>
    // Em alguns compiladores, pode ser necessário remover o comentário da linha abaixo
    // #define _USE_MATH_DEFINES
    // para usar M_PI.
    #include <cmath>
    
    int main()
    {
        std::cout << std::sin(M_PI / 2.0) << std::endl; // Seno.
    
        return 0;
    }
  4. Comparações (true significa verdadeiro; false significa falso; para inteiros, 0 significa falso e qualquer valor que não seja zero corresponde a verdadeiro):

    // g++ 4.1.cpp -o p4.1
    #include <iostream>
    
    int main()
    {
        std::cout << (1 == 2) << std::endl; // Igual: os dois iguais são necessários!
        std::cout << (1 != 2) << std::endl; // Diferente.
    
        return 0;
    }
    // g++ 4.2.cpp -o p4.2
    #include <iostream>
    #include <string>
    
    int main()
    {
        std::cout << ("Franco" == "Franco") << std::endl;
        std::cout << ("Franco" != "Franco") << std::endl;
        std::cout << ("Franco" != "Seu Nome") << std::endl;
        // C++ considera que letras minúsculas são diferentes de maiúsculas (e vice-versa).
        std::cout << ('F' == 'f') << std::endl; // Caracteres únicos em C++ são números inteiros.
        std::cout << ('F' != 'f') << std::endl;
        std::cout << ("Franco" == "franco") << std::endl;
        std::cout << ("Franco" != "franco") << std::endl;
    
        return 0;
    }
    // g++ 4.3.cpp -o p4.3
    #include <iostream>
    
    int main()
    {
        std::cout << (1 < 2) << std::endl; // Menor.
        std::cout << (1 > 2) << std::endl; // Maior.
        std::cout << (1 <= 2) << std::endl; // Menor ou igual.
        std::cout << (1 >= 2) << std::endl; // Maior ou igual.
    
        return 0;
    }
  5. Variáveis e atribuição (documentação):

    Variáveis são como caixinhas que armazenam valores colocados dentro delas. Efetiva-se um armazenamento usando o operador de atribuição, que é um único igual (=) em C++.

    // g++ 5.1.cpp -o p5.1
    #include <iostream>
    
    int main()
    {
        int x = 123;
        std::cout << x << std::endl;
    
        return 0;
    }
    // g++ 5.2.cpp -o p5.2
    #include <iostream>
    
    int main()
    {
        float resultado = 123.456 + 987.654;
        std::cout << resultado << std::endl;
    
        return 0;
    }

    Deve-se notar que a declaração de variáveis pode ser feita uma única vez por nome escolhido. Entretanto, pode-se mudar seu valor quantas vezes forem necessárias.

    // g++ 5.3.cpp -o p5.3
    #include <iostream>
    #include <string>
    
    int main()
    {
         std::string nome = "Franco";
         std::cout << nome << std::endl;
         nome = "Franco Garcia";
         std::cout << nome << std::endl;
    
        return 0;
    }
    // g++ 5.4.cpp -o p5.4
    #include <iostream>
    #include <string>
    
    int main()
    {
        std::string variaveis_podem_variar = "Franco";
        std::cout << variaveis_podem_variar << std::endl;
        variaveis_podem_variar = "Seu Nome";
        std::cout << variaveis_podem_variar << std::endl;
        variaveis_podem_variar = "Outro Nome";
        std::cout << variaveis_podem_variar << std::endl;
    
        return 0;
    }
    // g++ 5.5.cpp -o p5.5
    #include <iostream>
    
    int main()
    {
        bool valor_logico = true;
        std::cout << valor_logico << std::endl;
        valor_logico = false;
        std::cout << valor_logico << std::endl;
        valor_logico = (1 + 1 == 2);
    
        return 0;
    }
  6. Constantes (documentação):

    // g++ 6.1.cpp -o p6.1
    #include <iostream>
    
    const float PI = 3.14159;
    
    int main()
    {
        std::cout << PI << std::endl;
    
        return 0;
    }
    // g++ 6.2.cpp -o p6.2
    #include <iostream>
    
    const float E = 2.71828;
    
    int main()
    {
        std::cout << E << std::endl;
        E = 0; // Erro; o valor de uma constante é inalterável após definido.
    
        return 0;
    }
  7. Erros:

    // g++ 7.cpp -o p7
    #include <iostream>
    
    int main()
    {
        std::cout << Ooops!; // Texto deve estar entre aspas duplas.
        std::cou << "Nome incorreto para cout" << std::endl;
        std::cout << 1 / 0 << std::endl;
        std::cout << 0 / 0 << std::endl;
    
        return 0;
    }
  8. Cadeias de caracteres (strings) para palavras e texto (documentação):

    // g++ 8.1.cpp -o p8.1
    #include <iostream>
    
    int main()
    {
        std::cout << "Ok, cadeia de caracteres válida" << std::endl;
        std::cout << 'A' << std::endl; // Único caractere.
        std::cout << "Ok, também é" " uma cadeia de" " caracteres válida" "\n";
    
        return 0;
    }
    // g++ 8.2.cpp -o p8.2
    #include <iostream>
    
    int main()
    {
        std::cout << "Para 'misturar' aspas, use diferentes das externas." << std::endl;
        std::cout << "Caso contrário, você precisa escapá-las com uma contrabarra, assim: \". A contrabarra é necessária." << std::endl;
    
        return 0;
    }
  9. Operações lógicas (documentação):

    // g++ 9.cpp -o p9
    #include <iostream>
    
    int main()
    {
        std::cout << (true && true) << std::endl; // Operação lógica "e" ("and").
        std::cout << (true || true) << std::endl; // Operação lógica "ou" ("or").
        std::cout << (!false) << std::endl; // Operação lógica "não" ("not").
    
        return 0;
    }
  10. Condições (documentação):

    // g++ 10.1.cpp -o p10.1
    #include <iostream>
    #include <string>
    
    int main()
    {
        std::string navegador = "Firefox";
        if (navegador == "Firefox")
        {
            std::cout << "Mozilla Firefox." << std::endl;
        }
    
        return 0;
    }
    // g++ 10.2.cpp -o p10.2
    #include <iostream>
    #include <string>
    
    int main()
    {
        std::string meu_navegador = "Seu Navegador";
        if (meu_navegador == "Firefox")
        {
            std::cout << "Você usa um navegador da Mozilla." << std::endl;
        }
        else
        {
            std::cout << "Você usa outro navegador." << std::endl;
        }
    
        return 0;
    }
    // g++ 10.3.cpp -o p10.3
    #include <iostream>
    #include <cctype>
    #include <string>
    
    int main()
    {
        std::string eu_uso = "X";
    
        int indice = 0;
        for (char& caractere : eu_uso)
        {
            caractere = std::tolower(caractere);
        }
    
        if (eu_uso == "firefox")
        {
            std::cout << "Você usa um navegador da Mozilla." << std::endl;
        }
        else if ((eu_uso == "chrome") || (eu_uso == "chromium"))
        {
            std::cout << "Você usa um navegador do Google." << std::endl;
        }
        else if (eu_uso == "edge")
        {
            std::cout << "Você usa um navegador da Microsoft." << std::endl;
        }
        else if (eu_uso == "safari")
        {
            std::cout << "Você usa um navegador da Apple." << std::endl;
        }
        else if (eu_uso == "internet explorer")
        {
            std::cout << "Você deveria usar um navegador mais moderno..." << std::endl;
        }
        else
        {
            std::cout << "Você usa outro navegador." << std::endl;
        }
    
        return 0;
    }
  11. Repetições ou laços (documentação: for, while, e do...while):

    // g++ 11.1.cpp -o p11.1
    #include <iostream>
    
    int main()
    {
        int i;
        for (i = 0; i < 5; i = i + 1)
        {
            std::cout << i << std::endl;
        }
    
        return 0;
    }
    // g++ 11.2.cpp -o p11.2
    #include <iostream>
    
    int main()
    {
        int j = 0;
        while (j < 5)
        {
            std::cout << j << std::endl;
            ++j; // O mesmo que j = j + 1 e similar a j++ (existem algumas pequenas diferenças)
        }
    
        return 0;
    }
    // g++ 11.3.cpp -o p11.3
    #include <iostream>
    
    int main()
    {
        int k = 0;
        do
        {
            std::cout << k << std::endl;
            k++;
        }
        while (k < 5);
    
        return 0;
    }
  12. Funções (documentação):

    // g++ 12.cpp -o p12
    #include <iostream>
    
    int minha_funcao(int x, int y)
    {
        int resultado = x + y;
        return resultado;
    }
    
    int main()
    {
        // Uma função é um bloco de código que realiza um processamento arbitrário
        // conforme definido pela programadora ou pelo programador.
        // Após a definição, pode-se executar a função quando se quiser, por meio
        // de uma chamada de função.
        int z = minha_funcao(12, -34); // Este é um exemplo de uma chamada de função.
        std::cout << z << std::endl;
        std::cout << minha_funcao(1, 2) << std::endl; // Este é outro.
    
        return 0;
    }
  13. Tipos de dados (documentação):

    // g++ 13.cpp -o p13
    #include <iostream>
    #include <string>
    
    int main()
    {
        int numero_inteiro = 1;
        int outro_numero_inteiro = -1;
        float numero_real = 1.23;
        bool valor_logico = true; // ou false; só pode ser true ou false.
        std::string cadeia_caracteres = "Texto aqui. Quebras de linha usam\nou seja, isto estará\n na terceira linha.";
    
        return 0;
    }
  14. Entrada (documentação: std::getline e std::cin):

    // g++ 14.cpp -o p14
    #include <iostream>
    #include <string>
    
    int main()
    {
        // Quando se solicitar a entrada de um valor, escreva um e aperte `enter`.
        std::cout << "Qual é o seu nome? ";
        std::string seu_nome;
        std::getline(std::cin, seu_nome);
        std::cout << "Quantos anos você tem? ";
        int sua_idade;
        std::cin >> sua_idade;
    
        std::cout << seu_nome << std::endl;
        std::cout << sua_idade << std::endl;
        std::cout << "Olá, " << seu_nome << "!" << std::endl;
        std::cout << "Você tem " << sua_idade << " anos." << std::endl;
    
        return 0;
    }

Parabéns! Você Já Pode Escrever Qualquer Programa em C++

Bem... Provavelmente não. Assim como C, C++ é uma linguagem complexa. Em particular, a sintaxe de C++ pode ser difícil de ler e escrever quando se começa a programar na linguagem. A sintaxe pode ficar ainda mais difícil de ler quando se começa a usar recursos específicos de C++ como templates.

Contudo, o título da seção está tecnicamente correto.

Não acredita? Você pode encontrar a explicação na introdução à linguagem JavaScript.

Em resumo, aprender a sintaxe de uma linguagem não é suficiente para resolver problemas com ela. O aprendizado de lógica de programação e o desenvolvimento de habilidades de pensamento computacional são muito mais importantes que a sintaxe. De fato, quando se tem dúvidas sobre a sintaxe, basta consultar a documentação. Não é preciso decorá-la.

Após aprender uma primeira linguagem de programação, aprender outras linguagens (que adotem paradigmas semelhantes aos da primeira) é relativamente simples. Para constatar a afirmação, pode-se abrir uma nova janela em seu navegador e deixá-la lado a lado com esta. Em seguida, pode-se comparar os blocos de código escritos em C++ (nesta janela) e em Python (na segunda janela).

Caso se deseje fazer comparações entre mais linguagens de programação, pode-se escolher:

Próximos Passos

Com o ambiente de desenvolvimento configurado, você pode continuar sua jornada de desenvolvimento de sistemas.

Para evitar repetições, recomendo a leitura da página sobre configurações de ambiente para JavaScript. Mesmo que você não tenha interesse na linguagem, muitas discussões são relevantes para quaisquer linguagens de programação. Além disso, você entenderá uma forma de criar páginas para a Internet e poderá criar conteúdo para seu navegador.

Até GDScript (para Godot Engine), os tópicos descrevem configurações de ambientes de desenvolvimento para algumas linguagens de programação. Após GDScript, o foco torna-se conceitos básicos para o aprendizado de programação.

  • Informática
  • Programação
  • Iniciante
  • Dev Env
  • Windows
  • Linux
  • CPP