Começando a programar em C mais mais

De ccppbrasil.org

O nome correto desse artigo é "Começando a programar em C++". Ele foi escrito dessa forma por uma limitação técnica quanto ao caractere "+" em uma URL.

Esse artigo é uma adaptação do original publicado em http://www.1bit.com.br/content.1bit/weblog/faq_cpp_start

Quero me converter para o lado poderoso da força, mas essa história de C e C++ me confunde. O que é o que?
A linguagem C foi criada no início dos anos 70 para ser usada na programação do UNIX. Cansados de fazer tudo em Assembly, os programadores resolveram criar uma linguagem que fosse estruturada e que permitisse programação low-level ao mesmo tempo. Assim nasceu a linguagem C.

/*
 Isso está em C
*/

#include <stdio.h>
#include <string.h>

int main()
{
  int a = 15;
  int b = 20;
  char buffer[128]; /* uma string é um array (ou vetor) de bytes terminado por ASCII zero */

  strcpy(buffer, "A variável [a] é ");

  if(a > b)
    strcat(buffer, "maior");
  else
    strcat(buffer, "igual ou menor ");

  strcat(buffer, " que a variável [b]\r\n");
 
  printf(buffer);

  return 0;
}

O C++ é uma evolução da linguagem C, e foi criada por Bjarne Stroustrup. Nessa evolução foi adicionado à linguagem C o conceito de orientação à objetos, que virou moda naquela época (começo dos anos 80) e é muito usado hoje em dia. Além disso, o próprio C++ foi evoluindo no decorrer da década de 80 e 90, com a adição de recursos como templates e a STL (que veremos depois). O C++ tem tudo que a linguagem C tem (99,8% de compatibilidade) e mais toda a evolução. Todo compilador C++ que eu conheço compila código C sem problemas.

//
// Isso está em C++
//

#include <iostream>
#include <string>

using namespace std;

int main()
{
  int a = 15;
  int b = 20;
  string buffer; // string é um objeto

  buffer = "A variável [a] é ";

  if(a > b)
    buffer += "maior";
  else
    buffer += "igual ou menor ";

  buffer += " que a variável [b]";
 
  cout << buffer << endl;

  return 0;
}

O exemplo feito em C, é compilado sem problemas por qualquer compilador C++, já que ele é também um código C++ válido.

Preciso aprender C antes de aprender C++?
Não, não e não. Eu recomendo que você aprenda C++ direto, sem passar pelo C, já que hoje em dia o C++ é mais usado. Se algum dia você precisar fazer algo em C, é só estudar as limitações do C em relação ao C++. As estruturas básicas de controle (if, while, switch...) são as mesmas, o que muda é que a linguagem C não suporta todos os recursos do C++, com suporte à programação orientada a objetos, bibliotecas, templates, etc. Mesmo assim, em C++ você pode usar as bibliotecas do C sem problemas.


Você pode me recomendar algum livro para aprender C++?
O único livro para iniciantes que eu conheço e achei bom é o Beginning Visual C++ Programming. Se você é iniciante, qualquer material pode te ajudar, desde um livro de C até um tutorial de Internet. Depois que você já estiver com alguma prática em C++, leia o The C++ Programming Language do Stroustrup, que é o guia definitivo sobre o assunto, e que eu recomendo até para os programdores C++ experientes. Eu prentendo recomendar mais livros a medida que o FAQ for avançando.


Todo mundo diz que C++ é muito complicado. Isso é verdade?
Você é um homem ou um rato? C++ requer mais estudo por ser uma linguagem completa e poderosa, mas não é nada que um ser humano normal não consiga aprender. Tem gente que acha que usar o Microsoft Word é complicado. Esqueça o que os outros dizem e estude aquilo que você tem vontade.


A moda agora é .NET e Java, será que vale a pena estudar C++?
Vale. Como as pessoas estão indo para as linguagens mais fáceis, os profissionais de C++ são mais valorizados. Afinal, quando se precisa de algo 10 vezes mais rápido, alguém precisa fazer. Não se esqueça que praticamente todos os softwares comerciais que existem são feitos em C ou C++ (Windows, Office, SQL Server, Oracle, Photoshop, CorelDRAW, Linux, Visual Studio, o próprio .NET e todas as VMs Java, etc, etc, etc).

Eu já ouvi falar que o Java e o C# são versões melhoradas do C++. Isso é verdade?
Se você acha que uma versão mais limitada de alguma coisa é uma melhoria... O Java e o C# são baseadas na linguagem C++, tirando muitos recursos que, apesar de poderosos, causavam confusão ou dificuldade. Foi feita uma simplificação e um nivelamento por baixo (ok, pelo meio) para atender às necessidades mais comuns. Por serem mais simples, essas duas linguagens são indicadas para aplicativos tecnicamente mais simples, como os que manipulam bancos de dados, controlam regras de negócios e fazem entradas de dados. As duas runtimes (JVM e .NET) têm algumas vantagens sobre o C++, como gerenciamento automático de memória, independência relativa de arquitetura e mais facilidade para leitura dos metadados (enumerar as classes de um DLL, por exemplo). Mas têm a desvantagem de consumirem bem mais memória, serem mais lentas (isso pode melhorar com o tempo) e terem limitações técnicas que as impedem de desenvolver certos tipos de software (como device drivers).


Onde posso achar mais informações sobre C++?

Wikipedia - Linguagem C
Wikipedia - C++
Bjarne Stroustrup's C++ FAQ
Bjarne Stroustrup's C++ Style and Technique FAQ
Google: "C++ tutorial" (antes que alguém pergunte...)

Ferramentas pessoais