Skip to content

C Language

João Medeiros edited this page May 20, 2026 · 8 revisions

Introduction

A linguagem de programação C foi desenvolvida por Dennis Ritchie na Bell Labs a partir de 1972. Ritchie, motivado pela ideia de uma linguagem adequada para re-implementação do sistema operacional Unix, planejou C como uma extensão da linguagem B, com suporte a tipos nativos e definidos pelo usuário. Considere abaixo um programa mínimo escrito na linguagem em acordo com a norma ISO/IEC 9899 (1999, p. 12).

int main(void)
{
    return 0;
}

No trecho acima, temos a definição da função que serve como ponto de entrada para o programa, denominada main(). O primeiro palavra do código int antes do nome da função main indica que o valor retornado pela função será armazenado em uma posição de memória associada a um tipo inteiro. O tipo void em C é usado para explicitar a não necessidade de definição de tipo. Segundo a norma ISO/IEC 9899 (1999, p. 35), esse tipo compreende um conjunto vazio de valores. Dessa forma, a palavra void indica na definição da função denominada main, que a função não deve receber parâmetros. A palavra return indica um ponto de término da função. No código acima, a função main() termina retornando para quem a chamou o valor 0 (zero) armazenado em uma posiçao de memória do tipo int.

Compilation

Antes de ser executado, o código acima precisa ser traduzido para a linguagem de máquina da arquitetura a que se propõe a ser executado. Para isso, é necessário o uso de um programa denominado compilador. Como ilustrado abaixo.

flowchart LR
    X["code.c\n(fonte)"]
    Y["gcc\n(compilador)"]
    Z["code\n(programa)"]
    X -->|input| Y
    Y -->|output| Z
Loading

Assumindo que o código C apresentado é o do arquivo code.c, abaixo é apresentado o uso do compilador GCC em um ambiente Linux.

term@alg$ gcc code.c -o code

O uso da opção -o indica o nome do arquivo a ser gerado como programa executável. Com a utilização do programa hexdump, apresenta-se abaixo o conteúdo dos primeiros 32 bytes dos dois arquivos.

term@alg$ hexdump -C -n 32 code.c
00000000  69 6e 74 20 6d 61 69 6e  28 76 6f 69 64 29 0a 7b  |int main(void).{|
00000010  0a 20 20 20 20 72 65 74  75 72 6e 20 30 3b 0a 7d  |.    return 0;.}|
00000020
term@alg$ hexdump -C -n 32 code
00000000  7f 45 4c 46 02 01 01 00  00 00 00 00 00 00 00 00  |.ELF............|
00000010  03 00 3e 00 01 00 00 00  40 10 00 00 00 00 00 00  |..>.....@.......|
00000020
term@alg$

Na saída referente ao arquivo code.c, persebe-se o conteúdo na representação ASCII dos bytes apresentados. Na saída referente ao arquivo code, tem-se a identificação de um cabeçalho ELF (Executable and Linkable Format). Trata-se de um formato de descrição de arquivos binários utilizado pelo sistema operacional Linux, para o qual o código fonte foi compilado.

Execution

term@alg$ ./code
term@alg$
flowchart LR
    X["Bash\n(terminal)"]
    Y["Linux\n(sistema operacional)"]
    X -->|"code (binário)"| Y
    Y -->|"0 (inteiro)"| X
Loading
term@alg$ echo $?
0
term@alg$

References

ISO/IEC 9899:1999 - Programming languages - C
GCC - the GNU Compiler Collection
ASCII Table

Clone this wiki locally