6 Introdução à programação

Arquitetura abstrata, linguagem de máquina, assembly, linguagens de alto nível, meu primeiro programa.

6.1 Linguagem de alto nível

Toda linguagem de programação possui uma sintaxe que define a estrutura em que deve ser escrita. Nas linguagens de programação de alto nível, além da sintaxe, a semântica dos elementos também deve ser respeitada. Por exemplo, ao contrário das linguagens de montagem, devemos seguir regras semânticas quanto ao tipo de cada variável do código.

De maneira geral, podemos dividir um programa em níveis de complexidade, ou seja, aplicarmos o conceito de abstração:

  • Um programa é composto por subprogramas;
  • Subprogramas são compostos por conjuntos de definições e sequências de comandos;
  • Cada definição ou comando é uma sequência de tokens; e
  • Cada token é a unidade léxica mínima do programa.

6.2 Primeiro programa de alto nível

Como vimos anteriormente, linguagens de programação de alto nível permitem ao programador construir um software composto por diversos módulos. Neste caso, é necessário identificar o “ponto de entrada” do programa. Ou seja, dentre as diversas potenciais funcionalidades do programa, qual é a primeira instrução executada.

Em C++20, o início do programa ocorre na função main. Esta é a função que o sistema operacional invoca quando o programa é executado — outras rotinas podem ser executadas antes da main, por exemplo, para inicializar variáveis globais; no entanto, estes detalhes estão fora do escopo deste livro. Veja mais informações aqui.

// hello.cpp
#include <iostream>
auto main() -> int {
  std::cout << "Hello, world!\n";
}

Há várias nuances deste programa que entraremos em detalhes futuramente. No momento, é suficiente saber que esse arquivo, quando compilado e executado, resultará em uma saída com o texto "Hello, world!" seguido de quebra de linha.

$ g++ -std=c++20 hello.cpp -o hello
$ ./hello
Hello, world!

6.3 Sobre C++

A linguagem C++ é uma linguagem de programação de alto nível de propósito geral. Qualquer problema computável pode ser resolvido usando a linguagem C++; ou seja, o modelo abstrato1 da linguagem C++ é Turing-completo.

Ela é uma linguagem imperativa, na qual comandos (statements) são utilizados para alterar o estado do programa e, consequentemente, sua operação. Além disso, ao contrário das linguagens de montagem (assembly languages), a linguagem permite programação estruturada, organizando os comando em condicionais, laços, blocos e sub-rotinas.

A principal especificação da linguagem C++ é o ISO/IEC 14882. Neste livro, utilizaremos o padrão ISO/IEC 14882:20202. Um excelente material de apoio quanto a especificação do C++20 é o site .

6.3.1 Sintaxe e semântica

Toda linguagem de programação possui uma sintaxe que define a estrutura em que deve ser escrita. Nas linguagens de programação de alto nível, além da sintaxe, a semântica dos elementos também deve ser respeitada. Por exemplo, ao contrário das linguagens de montagem, devemos seguir regras semânticas quanto ao tipo de cada variável do código. (Veremos isso com mais detalhes no decorrer do curso.)

De maneira geral, podemos dividir um programa em níveis de complexidade (lembrem-se do conceito de abstração):

  • Um programa é composto por subprogramas;
  • Subprogramas são compostos por conjuntos de definições e sequências de comandos;
  • Cada definição ou comando é uma sequência de tokens; e
  • Cada token é a unidade léxica mínima do programa.

Veremos em detalhes cada um destes conceitos a seguir.


  1. Ignorando questões de implementação, como limitação de memória.↩︎

  2. https://www.iso.org/standard/79358.html↩︎