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:17] – [Compiladores] etapas da compilação (criação das subseções) 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:
  
-  - [[prog:guia-de-estudo-c#pre_processamento|Pré-processamento]]+  - [[prog:guia-de-estudo-c#pre-processamento|Pré-processamento]]
   - [[prog:guia-de-estudo-c#compilacao|Compilação]] propriamente   - [[prog:guia-de-estudo-c#compilacao|Compilação]] propriamente
   - [[prog:guia-de-estudo-c#montagem|Montagem]]   - [[prog:guia-de-estudo-c#montagem|Montagem]]
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 223: Linha 224:
  
 === Pré-processamento === === 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 === === Compilação ===
Linha 316: 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.1716070671.txt.gz · Última modificação: 2024/05/18 19:17 por hrcerq