Slackjeff Wiki

Bits que significam

Ferramentas do usuário

Ferramentas do site


prog:guia-de-estudo-c

Diferenças

Aqui você vê as diferenças entre duas revisões dessa página.

Link para esta página de comparações

Ambos lados da revisão anteriorRevisão anterior
Próxima revisão
Revisão anterior
prog:guia-de-estudo-c [2024/05/18 19:03] – [Mais bibliotecas] correção de link hrcerqprog:guia-de-estudo-c [2024/12/28 01:05] (atual) – [História] correção ortográfica hrcerq
Linha 67: Linha 67:
  
 O [[https://pt.wikipedia.org/wiki/C_(linguagem_de_programa%C3%A7%C3%A3o)|artigo da Wikipédia]] O [[https://pt.wikipedia.org/wiki/C_(linguagem_de_programa%C3%A7%C3%A3o)|artigo da Wikipédia]]
-também é útil para obter uma visão geral sobreo tema.+também é útil para obter uma visão geral sobre o tema.
  
  
Linha 189: Linha 189:
 etapas, notadamente: etapas, notadamente:
  
-  - Pré-processamento +  - [[prog:guia-de-estudo-c#pre-processamento|Pré-processamento]] 
-  - Compilação propriamente +  - [[prog:guia-de-estudo-c#compilacao|Compilação]] propriamente 
-  - Montagem +  - [[prog:guia-de-estudo-c#montagem|Montagem]] 
-  - Ligação+  - [[prog:guia-de-estudo-c#ligacao|Ligação]]
  
 As ferramentas que desempenham essas funções podem ou não estar As ferramentas que desempenham essas funções podem ou não estar
Linha 204: Linha 204:
   * [[https://wiki.inf.ufpr.br/computacao/doku.php?id=c:compiladores|Compiladores]]   * [[https://wiki.inf.ufpr.br/computacao/doku.php?id=c:compiladores|Compiladores]]
   * [[https://www.dca.fee.unicamp.br/cursos/EA876/apostila/HTML/node37.html|Compiladores]]   * [[https://www.dca.fee.unicamp.br/cursos/EA876/apostila/HTML/node37.html|Compiladores]]
 +  * //[[https://www.cs.man.ac.uk/~pjj/farrell/compmain.html|Compiler Basics]]// (inglês)
  
 Existem vários compiladores C, alguns mais conhecidos e populares, Existem vários compiladores C, alguns mais conhecidos e populares,
Linha 221: Linha 222:
 Conhecer ao menos esses dois já será suficiente para compreender as Conhecer ao menos esses dois já será suficiente para compreender as
 funções centrais desse tipo de ferramenta. funções centrais desse tipo de ferramenta.
 +
 +=== Pré-processamento ===
 +
 +Ao ler arquivos-fonte C, você talvez tenha reparado que algumas
 +linhas iniciam pelo caractere de jogo-da-velha (''#'') e pensado
 +que essa notação também é parte da linguagem C. Ledo engano.
 +
 +Essas instruções são conhecidas como diretivas de pré-processamento,
 +e são usadas como um complemento da linguagem C para automatizar a
 +geração de partes do código C, antes que ele efetivamente seja
 +compilado (daí o nome "pré-processamento").
 +
 +Por exemplo, as diretivas de inclusão (''#include'') incluem o código
 +de um outro arquivo-fonte C (por convenção, os cabeçalhos, que possuem
 +extensão ''.h''), como se fosse parte do próprio arquivo. Diretivas de
 +definição (''#define'') definem constantes ou macro-processadores, que
 +serão substituídos pelo valor definido em cada ocorrência.
 +
 +Essas substituições são feitas pelo pré-processador. Além disso, ele
 +também substitui //trigrafos// (ignore se não sabe o que são) e
 +substitui comentários por espaços em branco.
 +Tudo isso é feito antes da compilação. O arquivo gerado pelo
 +pré-processamento terá código C, exclusivamente.
 +
 +Você pode saber mais sobre as funções do pré-processador a partir
 +dos documentos a seguir:
 +
 +  * [[https://pt.wikipedia.org/wiki/Pr%C3%A9-processador|Pré-processador]]
 +  * //[[https://en.wikipedia.org/wiki/C_preprocessor|C preprocessor]]// (inglês)
 +
 +Existem diferentes pré-processadores, alguns deles, como foi dito,
 +fazem parte de uma coleção de ferramentas para compilação, como
 +GCC, Clang, TCC e outros, porém também existem pré-processadores
 +avulsos. Alguns exemplos:
 +
 +  * [[https://gcc.gnu.org/onlinedocs/cpp/|GNU CPP]] (parte do GCC)
 +  * [[https://clang.llvm.org/|Clang]] (pré-processador [[https://clang.llvm.org/doxygen/classclang_1_1Preprocessor.html|embutido]])
 +  * [[https://bellard.org/tcc/|TCC]] (pré-processador [[https://repo.or.cz/tinycc.git/blob/HEAD:/tccpp.c|embutido]])
 +  * [[http://mcpp.sourceforge.net|mcpp]]
 +  * [[https://github.com/lpsantil/ucpp|ucpp]]
 +
 +=== Compilação ===
 +
 +=== Montagem ===
 +
 +=== Ligação ===
  
 ==== Biblioteca C ==== ==== Biblioteca C ====
Linha 308: Linha 355:
   * [[http://www.crufty.net/help/sjg/bmake.htm|bmake]] (inglês)   * [[http://www.crufty.net/help/sjg/bmake.htm|bmake]] (inglês)
  
 +É desejável, sempre que possível, criar arquivos ''Makefile''
 +portáveis, isto é, que funcionem em diferentes implementações.
 +Isto facilita significativamente a manutenção quando há
 +possibilidade de usar uma implementação diferente.
 +
 +Por exemplo, em distribuições GNU/Linux, é mais comum o uso do
 +GNU Make, muitas vezes já instalado por padrão no sistema. Nos
 +BSDs, o mais comum é a implementação conhecida como ''bmake''.
 +Ao criar scripts ''Makefile'' que podem ser usados em sistemas
 +diferentes, considere aderir totalmente ao padrão POSIX.
 +
 +Isso pode ser um pouco difícil se você já tiver se acostumado
 +a uma implementação específica. O artigo a seguir oferece
 +algumas dicas nesse sentido.
 +
 +  * //[[https://nullprogram.com/blog/2017/08/20/|A Tutorial on Portable Makefiles]]// (inglês)
 ===== Estilos de programação ===== ===== Estilos de programação =====
  
prog/guia-de-estudo-c.1716069794.txt.gz · Última modificação: 2024/05/18 19:03 por hrcerq