Rede Linux IME-USP - Fabiano Siqueira Esta página foi construída com o Quanta Plus 3.5.1 - GNU Linux


Linguagem de Programação C/C++



  A origem do C

  A linguagem C teve seu desenvolvimento inicial na Bell Labs, divisão da AT&T, a famosa companhia americana de telecomunicações, por Dennis Ritchie entre os anos de 1969 e 1973, para uso no sistema operacional Unix. Foi então disseminada para outros sistemas operacionais, uma das linguagens de programação mais utilizadas, C é reconhecida pela eficiência dos códigos que produz.
  Ela não foi criada para servir como uma linguagem específica para ensino, apesar disso possui caractersíticas inesquecíveis, C é freqüentemente utilizada como elemento de educação em ciências de computação, em parte, por ser uma linguagem tão difundida.
  C é uma linguagem relativamente minimalista, foi comcebido para ser compilado com uma simples passagem do compilador, apenas um número reduzido de instruções de linguagem de máquina precisam ser solicitados por cada um de seus elementos chaves, sem nenhum suporte adicional de tempo de processamento (run-time), isto é, sem necessitar bibliotecas rodando juntamente com o programa compilado. É tranqüilamente possível gerar códigos de baixo nível de abstração como os produzidos em linguagem Assembly, de fato C algumas vezes é dita (nem sempre em tom pejorativo) como uma linguagem "Assembly de alto nivel" ou um "Assembly portátil". É também algumas vezes referenciado como uma linguagem de médio-nível.
  Em parte, devido ao seu conjunto de recursos modesto e de baixo nível, compiladores podem ser relativamente fáceis de serem construídos. Possui portanto compiladores em um número muito grande de plataformas (provavelmente mais do que qualquer outra linguagem existente). Entretanto, apesar de sua natureza de baixo nível, foi desenvolvida para proporcionar (e encorajar) programas que rodem independentemente de qualquer plataforma. Um código em C escrito de forma padronizada e compilável pode ser compilado por uma grande variedade de computadores.
  C foi originalmente desenvolvida (juntamente com o sistema operacional Unix, o qual foi sempre associado) por programadores e para programadores, o qual poucos usuários, além de seus criadores, desenharam-na em suas mentes.


  C possui os seguintes recursos importantes:

  • Um núcleo simples de linguagem com funcionalidades importantes, como funções matemáticas e manipulações de arquivos através de um conjunto de bibliotecas internas.
  • Foco em programação procedural (conceito de chamada de procedimentos através de passagem de parêmetros de entrada e retorno de valores de saída), que facilita a programação em estilo estruturado.
  • Um sistema de escrita de código que impede muitas operações sem significado.
  • Uso de um processador de linguagem, o processador C, para tarefas como definição de macros e inclusão de arquivos de códigos-fonte múltiplos.
  • Um acesso de baixo nível à memória do computador através do uso de ponteiros.
  • Um conjunto minimalista de instruções chave.
  • Parâmetros que são passados por valor. Semântica de passagens por referência pode ser simulada por declaração explícita de valores de ponteiros.
  • Ponteiro de funções e variáveis estáticas, o qual permite uma rudimentar forma de encapsulamento e polimorfismo em tempo de execução.
  • Escopo léxico (conjunto de palavras utilizadas no código) de variáveis. Escopos são contextos fechados, contém conteúdos que são associados a estes, exemplo:
  •       //Escopo 'namespace', apenas identificadores de grupos.
          namespace
          {
            //Escopo de classe, define/declara variaveis membros e funcoes.
            class C
            {
              //Escopo de funcao, contem declaracoes executaveis.
              void f (bool b)
              {
                //Escopo sem nome para declaracoes executaveis condicionadas.
                if (b)
                {
                  ...
                  ... declaracoes ...
                  ...
                }
              }
            };
          }
  • Estruturas de variáveis (struct), que permitem que dados relacionados sejam combinados e manipulados como um todo.


  •   Alguns recursos faltantes em C incluídas em outras linguagens:

  • Coleta automárica de lixo (exclusão de código inútil).
  • Linguagem suporte para programação orientada a objetos, apesar que a implementação original de C++ foi um pré-processador que traduzia C++ para dentro de um código C.
  • Encapsulamento.
  • Funções aninhadas, embora o GCC ("GNU Compiler Collection", conhecido originalmente como "GNU C Compiler", é o compliador GNU para linguagens de programação C, C++, Java, Fortran, Ada, e outros) possua este recurso como uma extensão.
  • Polimorfismo em tempo de compilação em forma de sobrecarga de funções, sobrecarga de operadores e existe apenas uma linguagem rudimentar de suporte para programações genéricas.
  • Suporte nativo para multiprocessamento (multithreading) e rede (networking).

  •   Apesar da lista de recursos úteis que C não possui ser longa, isso não tem sido um impedimento à sua aceitação, pois isso permite que novos compiladores de C sejam escritos rapidamente para novas plataformas, e também permite que o programador permaneça sempre no controle do que o programa faz, e permite soluções mais naturais para uma plataforma em particular. Isto é o que, por várias vezes, permite o código de C rodar de uma forma mais eficiente que muitas outras linguagens. Tipicamente, somente códigos escritos em Assembly "lapidados à mão" rodam mais rapidamente (desde que possua controle completo da máquina), mas avanços nos compiladores C e novas complexidades nos processadores tem estreitado esta lacuna gradativamente.

      Em alguns casos, a falta de um recurso pode ser adaptada em C. Por exemplo, a implementação original do C++ consistia de um preprocessador que traduzia a sintexe C++ para um código-fonte C.
      A maioria das funções orientadas a objeto incluem um ponteiro especial, comumente chamado de this, que referencia o objeto atual. Pela passagem deste ponteiro como argumento de uma função em C a mesma funcionalidade pode ser utilizada, por exemplo, em C++ uma escrita possível para o código seria:
    stack.push(val);
    Enquanto em C, uma escrita possível para o código seria:
    push(stack,val);
    Onde o argumento stack de C é um ponteiro para uma estrutura equivalente ao ponteiro this do C++, que é um ponteiro para um objeto.

    Texto extraído de Wikipedia - C programming language

    Não se preocupe com algumas termilogias como ponteiros, classes, objetos, etc. Estes serão abordados detalhadamente no decorrer dos tópicos.

    << Página inicial >>