C é uma linguagem de programação procedural de propósito geral que tem sido influente no desenvolvimento de muitas linguagens de programação modernas. Projetada para ser eficiente e flexível, é comumente usada para programação de sistemas, desenvolvimento de sistemas operacionais e criação de software de aplicação. C fornece acesso de baixo nível à memória e permite manipulação de bits, tornando-se uma escolha preferida para escrever software crítico em termos de desempenho.
C foi desenvolvida no início da década de 1970 por Dennis Ritchie nos Bell Labs como uma evolução da linguagem B, que foi influenciada por BCPL e ALGOL. Originalmente, foi destinada à programação de sistemas no sistema operacional Unix, que também se originou nos Bell Labs. O design da linguagem focou em fornecer uma abstração de alto nível sobre a linguagem de montagem, mantendo a eficiência da programação de baixo nível.
No final da década de 1970, C ganhou ampla adoção na comunidade de programação, e a publicação de "The C Programming Language" por Brian Kernighan e Dennis Ritchie em 1978 contribuiu significativamente para sua popularidade. A primeira versão padronizada, chamada C89 ou ANSI C, foi adotada pelo American National Standards Institute (ANSI) em 1989. A Organização Internacional de Normalização (ISO) posteriormente a adotou, resultando no ISO C99 em 1999, que introduziu vários novos recursos, como funções inline e arrays de comprimento variável. O padrão mais recente, C11, foi publicado em 2011, e C18, uma versão de correção de bugs, seguiu em 2018.
C continua sendo uma das linguagens de programação mais amplamente utilizadas no mundo, especialmente em programação de sistemas, sistemas embarcados e aplicações de alto desempenho. Sua sintaxe e conceitos influenciaram muitas outras linguagens, incluindo C++, C#, Java e Objective-C. Sua relevância contínua pode ser vista em sistemas operacionais (Linux, Windows), programação de redes, sistemas embarcados e várias tarefas de computação de alto desempenho.
C permite a manipulação direta da memória através de ponteiros. Por exemplo:
int x = 10;
int *p = &x; // O ponteiro p contém o endereço de x
C suporta programação estruturada através de funções, permitindo a modularidade do código. Uma definição simples de função se parece com isto:
void greet() {
printf("Olá, Mundo!\n");
}
C inclui várias estruturas de controle de fluxo como if, switch, for, while e do-while, que facilitam a tomada de decisões.
if (x > 0) {
printf("Número positivo\n");
}
C possui vários tipos de dados embutidos: int, char, float, double, etc. Também suporta tipos de dados definidos pelo usuário usando estruturas.
struct Point {
int x;
int y;
};
C inclui um rico conjunto de bibliotecas para operações de entrada/saída, manipulação de strings e cálculos matemáticos.
#include <stdio.h>
#include <math.h>
double sqrtValue = sqrt(16);
C permite a conversão explícita de tipos, o que é útil para converter entre tipos.
double pi = 3.14;
int intPi = (int)pi; // intPi será 3
C suporta tipos enumerados para criar tipos personalizados.
enum Color { RED, GREEN, BLUE };
C inclui diretivas do pré-processador como #define, #include, que manipulam o código antes da compilação.
#define PI 3.14
C permite declarações de variáveis dentro de um escopo específico, melhorando a encapsulação.
{
int temp = 5; // temp é válido apenas dentro deste bloco
}
C não suporta sobrecarga de funções como C++, mas permite argumentos padrão através de implementação manual.
int add(int a, int b) {
return a + b;
}
C requer um compilador para transformar o código-fonte em código de máquina. Os compiladores mais populares incluem GCC (GNU Compiler Collection), Clang e MSVC (Microsoft Visual C++).
Para compilar um programa em C, você pode normalmente usar um comando como:
gcc -o myprogram myprogram.c
Isso compila myprogram.c
em um executável chamado myprogram
.
Vários IDEs suportam programação em C, como:
Esses IDEs fornecem recursos como destaque de sintaxe, ferramentas de depuração e gerenciamento de projetos.
C é amplamente utilizado em vários domínios, incluindo:
C é frequentemente comparada a várias outras linguagens de programação, pois compartilha semelhanças e serve como base para muitas:
C pode ser traduzido para linguagens que suportam construções de programação procedural e otimizações de baixo nível facilmente. Ao traduzir código C para uma linguagem de nível mais alto, os desenvolvedores devem prestar atenção às diferenças de gerenciamento de memória, uma vez que linguagens de nível mais alto frequentemente apresentam coleta de lixo.
Várias ferramentas de tradução de código-fonte podem ajudar a converter código C para outras linguagens, incluindo: