C: Ordem de leitura

Como o blog coloca os artigos mais recentes na frente, resolvi organizar esta página como sugestão de ordem de leitura dos artigos sobre a linguagem C. Também tem tem uma introdução de cada artigo, para você saber se já o leu, ou não.

A ideia aqui não é ser um curso para ensinar a programar em C, mas um conjunto de dicas e extras para o aprendizado. Um material bom como complemento ao aprendizado, e para melhor compreensão, é bom ler os artigos em uma ordem lógica. Aqui ficará a ordem lógica.

Linguagem C

A linguagem de programação C é mal compreendida por muita gente, inclusive por alguns que programam nela. Alguns pensam nela como uma linguagem de alto nível, como Pascal, Java, PHP, BASIC (Visual Basic não é BASIC), Visual Basic etc, mas ela não é bem assim. Ela nasceu na Bell Labs, criada por Dennis Ritchie quando migravam o Unix para o PDP 11. Atualmente pode-se dizer que é a linguagem de programação mais importante do mundo.

C: Como compilar

Como compilar um programa em C? É uma dúvida simples, mas comum entre os iniciantes. A resposta varia conforme o sistema e o desenvolvedor do compilador, mas tem um básico que é comum nos Unix, e nos outros sistemas cujo compilador seja por linha de comando. E sobre este modo que aqui tratarei.

C: Tipos básicos de dados

O C tem alguns tipos básicos de dados, dos quais os outros se originam. Eles são: char, int, float, double. E tem modificadores de tipo: signed, unsigned, short e long. Todo o resto é derivado destes

C: Modificadores de sinal e tamanho

A linguagem C tem basicamente quatro modificadores de tipo, dois em relação ao sinal, signed e unsigned, e dois relativo a tamanho da variável, short e long.

C: Dualidade char/int

O tipo char no C é este inteiro de um Byte, que pode ser usado para armazenar um número inteiro que caiba em um Byte, ou um caractere, e não é um tipo restritivo como outras linguagens de alto nível.

C: sizeof.c

Como forma de reconhecimento de um sistema, e de seu compilador C, este é um dos primeiros programas que executo em um sistema quando começo a mexer nele.

Processo x Programa Executável

"Alguém sabe a diferença entre um Processo e um Programa Executável?"

Esta foi a pergunta que um amigo, o Sergio Prallon, fez em uma turma de amigos para a qual ele ensinava C, a qual eu entrei de penetra. E eu respondi da seguinte forma:

C: Formas de armazenamento das variáveis

O C tem algumas formas de como uma variável será alocada. (Aqui se excluem as formas de alocação dinâmica, que deverá ser outro capítulo.) Estas formas são: auto, register, static e external.

C: Explicando as bruxarias

A linguagem C permite uma economias de expressão, e outras linguagens podem ter seus truques também, então é aconselhável o uso de comentários explicando as "bruxarias" que você fez.

C: Ser ou no ser - Boolean

No C não existe o tipo boolean, tal como existe em outras linguagens, mas existem operações lógicas. As operações lógicas são operações inteiras de baixo nível de precedência.

C: Avaliação incompleta

Existem duas formas de avaliação em expressões lógicas, a avaliação completa e a incompleta.

Por definição, no Pascal a avaliação sempre é completa (O Turbo Pascal tinha uma opção para mudar este comportamento.), e no C é incompleta.

O que é isto? Quais são as consequências? Como melhor aproveitar isto.

C: Contagem de condições lógicas

Digamos que em um algoritmo é necessário que pelo menos 3 de 5 condições sejam verdadeiras para tomar uma ação. Como testar isto? Fazer um emaranhado de if? Pior, se somente 3 de 5 tem que ser verdadeiras? Fazer um emaranhado maior?

C: Um exemplo de simplificação de expressão lógica

No outro dia vi uma expressão assim:

        if(((situacao == situacao_a) ||
            ((
situacao == situacao_b) && (strcmp(string,UMA_MACRO) == 0))) ||
            ((
situacao == situacao_c) ||
            ((
situacao == situacao_d) && (strcmp(string,UMA_MACRO) == 0))))
        {

                        /* ... */
        }


Este código acima está abaixo do ótimo, tanto em geração de código quanto em desempenho. Mas como otimizar?