====== Introdução à programação em C ====== Este material foi produzido a partir de diversas fontes, entre elas as transparências do prof. [[http://web.inf.ufpr.br/lferrari|Lucas Ferrari]] (UFPR) e o tutorial online [[http://www.tutorialspoint.com/cprogramming/index.htm|Learn C Programming]], entre outros. ===== Um breve histórico ===== A linguagem C foi criada por [[https://en.wikipedia.org/wiki/Dennis_Ritchie|Dennis Ritchie]] em 1972 para reescrever de forma portável o sistema operacional UNIX, que antes era escrito em //assembly//. Sua estrutura e seu nome provêm de uma linguagem anterior [[https://en.wikipedia.org/wiki/B_%28programming_language%29|B]], que era uma simplificação da linguagem de programação [[https://en.wikipedia.org/wiki/BCPL|BCPL]], escrita em 1966. Em 1978 foi publicado o famoso livro [[https://en.wikipedia.org/wiki/The_C_Programming_Language|C Programming Language]] por Brian Kernighan e Dennis Ritchie, consagrando a linguagem no padrão chamado K&R. Durante muitos anos esse livro foi considerado como a especificação da linguagem. Em 1989 o padrão C foi oficializado pelo ANSI (//American National Standards Institute//) através do padrão ANSI X3.159-1989, conhecido hoje como [[https://en.wikipedia.org/wiki/ANSI_C|ANSI C]], C89 ou C90. Em 1999 a ISO (//International Standards Organization//) publicou um novo padrão da linguagem chamado ISO/IEC 9899:1999 e conhecido como [[https://en.wikipedia.org/wiki/C99|C99]]. Existem padrões mais recentes (C11 e C17/C18), mas o C99 é o padrão mais usado atualmente. Apesar de sua idade, C continua sendo uma das linguagens mais utilizadas hoje em dia ([[https://www.tiobe.com/tiobe-index/|TIOBE Index]], [[https://spectrum.ieee.org/top-programming-languages-2022|Ranking IEEE]]). A linguagem C inspirou a criação de muitas outras linguagens de programação mais recentes, como C++, Java, C#, JavaScript, Perl, PHP, Lua, etc. ===== Características da linguagem ===== Algumas das principais características da linguagem C são: * linguagem procedural, modular e estruturada, com tipagem estática de dados. * geralmente é compilada para o código de máquina da plataforma alvo, gerando código compacto, eficiente e sem necessidade de um //runtime// de execução sofisticado. * Possui facilidades para acesso de baixo nível à memória, registradores e portas de E/S. * Extremamente portável, pode executar em plataformas de microcontroladores a supercomputadores. * É muito utilizada para escrever software de sistema, como sistemas operacionais, compiladores, serviços de rede, interfaces gráficas, bancos de dados, editores de texto, jogos, etc. * A maior parte das funcionalidades da linguagem provém de vastas bibliotecas, como a biblioteca padrão C (LibC ou [[https://en.wikipedia.org/wiki/C_standard_library|Standard C Library]]). ===== Exemplo de um programa em C ===== O código a seguir traz um ''Hello World'' em C: /* Este é um exemplo simples de código em C, que escreve a string 'Hello, world!' na saída padrão do terminal. */ #include // inclusão de definições int main () // função principal { printf ("Hello, world!\n") ; // função de entrada/saída return (0) ; // retorno (fim) da função } Algumas observações importantes sobre esse código: * A linha ''#include'' é um comando de preprocessador; ele indica que na fase inicial da compilação deve ser lido (incluído) o arquivo ''stdio.h'', que contém as definições das funções de entrada/saída da biblioteca padrão C (como a função ''printf''). * todo programa em C inicia sua execução pela função ''main'', que sempre deve ser definida. * Os blocos de código são delimitados por chaves (''{'' e ''}''). * Por ser uma função, ''main'' deve retornar um valor (linha ''return''). * Comentários são iniciados pelos caracteres ''%%//%%'' ou delimitados pelos caracteres ''%%/*%%'' e ''%%*/%%''. * A endentação não é obrigatória, mas é fundamental para a legibilidade do código. Para poder executar o código acima, ele deve ser salvo em um arquivo (''hello.c'') e compilado: $ cc hello.c -o hello $ ./hello Hello, world! ===== Estrutura de um programa em C ===== Um programa em C é composto basicamente das seguintes partes: * Comandos do preprocessador (linhas iniciando com ''#'') * Comentários * Definição de funções * definição de variáveis e tipos * Comandos e expressões Mais um exemplo simples, para concluir: /* Calcula a soma e a média de dois inteiros, escrevendo o resultado na saída padrão. */ #include int main () { int a, b, soma ; float media ; a = 10 ; b = 43 ; soma = a + b ; media = soma / 2.0 ; printf ("A soma de %d e %d vale %d\n", a, b, soma) ; printf ("A media de %d e %d vale %f\n", a, b, media) ; return (0) ; } Procure comentar o código adequadamente, para facilitar sua compreensão. Um bom comentário deve explicar **o que** um bloco de código faz, não **como** ele faz (pois isso deve estar claro no próprio código). Comentar código corretamente exige alguma técnica. [[https://stackoverflow.blog/2021/12/23/best-practices-for-writing-code-comments|Este texto]] traz algumas boas dicas sobre comentários.