-
Notifications
You must be signed in to change notification settings - Fork 1
C Language
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.
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
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 codeO 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.
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
term@alg$ echo $?
0
term@alg$ISO/IEC 9899:1999 - Programming languages - C
GCC - the GNU Compiler Collection
ASCII Table