FAVORITAR
FecharPlease login
16 Comentários
FAVORITAR
FecharPlease login

Domine a linguagem C: Tudo o que você precisa saber em um único lugar

Introdução sobre a linguagem C

A linguagem C é uma linguagem de programação de alto nível que foi criada nos anos 1970 para desenvolvimento de sistemas operacionais. Ela é amplamente utilizada em sistemas embarcados.

A seguir é apresentado um resumo das principais estruturas da linguagem C. Serão apresentados as Estruturas Básicas, Tipos de Dados, Operadores, Estruturas de Controle de Fluxo, Funções, Vetores e Matrizes, Ponteiros e Structs.

Use esse guia sempre que tiver dúvidas sobre algum tópico da linguagem C. Ao final do texto você encontrará mais artigos e referências com tópicos avançados e aplicações da linguagem C em sistemas embarcados.

Dica: Para reproduzir os códigos exemplos apresentados, você pode usar a ferramenta: OnlineGDB

Variáveis

As variáveis são locais de armazenamento em memória onde os dados podem ser armazenados e manipulados durante a execução de um programa.

Aqui está um exemplo de como declarar e atribuir um valor a uma variável em C:

Neste exemplo, a variável “idade” é declarada como um inteiro. Ela é então atribuída o valor 25 através da atribuição de valor “idade = 25”. O valor da variável “idade” é então exibido na tela através da função printf().

O resultado da execução deste programa seria: “Minha idade é: 25”.

Tipos de dados 

A linguagem C possui vários tipos de dados, como inteiros, ponto flutuante, caracteres e booleanos.

Veja como usar diferentes tipos de dados em C:

Neste exemplo, são declaradas quatro variáveis de diferentes tipos: inteiro, ponto flutuante, caractere e booleano. Cada uma delas é atribuída um valor apropriado e, em seguida, é exibida na tela através da função printf().

O resultado da execução deste programa:

Linguagem C

Operadores 

Os operadores são símbolos especiais utilizados para realizar operações matemáticas e lógicas. 

Operadores aritméticos

Os operadores aritméticos são usados para realizar operações matemáticas básicas em C, como adição, subtração, multiplicação e divisão. 

OperadorOperação
+soma
subtração
*multiplicação
/divisão inteira
%módulo
++incremento
decremento

Resultado:

Linguagem C

Operadores relacionais

Os operadores relacionais são usados para comparar dois valores em C e produzir um valor lógico (verdadeiro(1) ou falso(0)) como resultado.

OperadorOperação
==igual
!=diferente
>maior do que
<menor do que
>=maior ou igual
<=menor ou igual  

Exemplo:

Resultado

Linguagem C

Operadores lógicos

Os operadores lógicos são usados para combinar expressões booleanas em C e produzir um valor lógico (verdadeiro ou falso) como resultado. 

OperadorOperação
&&AND  (E)
||OR (OU)
!NOT (NÃO)

Exemplo:

Resultado:

Linguagem C

Operadores bit-a-bit

Os operadores bit-a-bit são usados para realizar operações bit-a-bit em C. Eles são úteis quando você precisa trabalhar com números binários diretamente. 

OperadorOperação
&AND (E)
|OR (OU)
^XOR (OU-EXCLUSIVO0
~NOT (NÃO)
<<deslocamento de bits à esquerda 
>>deslocamento de bits à direita 

Exemplo:

Resultado

Linguagem C

Operadores especiais

sizeof()

O operador sizeof() é usado para descobrir o tamanho, em bytes, de uma variável ou tipo de dados em C. Ele é útil para determinar o espaço de armazenamento necessário para uma determinada variável ou estrutura. 

Endereço (&) e ponteiro(*)

O operador de endereço (&) é usado para obter o endereço de uma variável em C, enquanto os ponteiros(*) são variáveis que armazenam esses endereços. Eles permitem que você acesse e altere o valor de uma variável através de seu endereço.

Operador Ternário 

O operador ternário é um operador condicional que permite escrever expressões condicionais de maneira concisa e legível. Ele é composto por três partes: uma expressão condicional, seguida de um ponto de interrogação (?), seguida de uma expressão a ser avaliada caso a expressão condicional seja verdadeira, e um dois-pontos (:), seguido de uma expressão a ser avaliada caso a expressão condicional seja falsa. A sintaxe geral é:

Aqui está um exemplo de como usar o operador ternário em C:

Neste exemplo, a expressão condicional “(a > b)” é avaliada, e caso seja verdadeira, a expressão “a” é avaliada e armazenada na variável ‘maior’, caso contrário, a expressão “b” é avaliada e armazenada na variável ‘maior’.

O operador ternário é uma maneira concisa de escrever expressões condicionais e pode ser usado para simplificar muitas estruturas de decisão condicionais comuns. Ele permite expressar de forma concisa e limpa a lógica de uma operação de condicional simples, e é bastante útil para expressar operações condicionais simples.

Estruturas de controle de fluxo 

As estruturas de controle de fluxo são usadas para controlar a execução de um programa, permitindo que ele execute diferentes ações de acordo com determinadas condições. 

if, if-else

A instrução “if” é uma estrutura de controle de fluxo que permite que você execute diferentes trechos de código com base em uma determinada condição. A sintaxe geral é:

Você pode incluir uma instrução “else” opcional para especificar o código a ser executado se a condição for falsa:

Aqui está um exemplo de como usar a instrução “if” em C:

Neste exemplo, a condição “idade < 18” é avaliada, e se for verdadeira, o código dentro do primeiro bloco de chaves é executado e imprime “Você é menor de idade.”, senão, o código dentro do segundo bloco é executado e imprime “Você é maior de idade.”

Além disso, você pode adicionar mais de um “if” e “else” para criar múltiplas condições ou incluir uma estrutura “else if” para adicionar mais condições e evitar a necessidade de aninhar vários ifs.

switch

A instrução “switch” é uma estrutura de controle de fluxo que permite que você execute diferentes trechos de código com base em um valor de expressão. A sintaxe geral é:

expressão é avaliada e comparada com cada um dos valores “case”. Quando um valor é encontrado que é igual à expressão, o código dentro do bloco correspondente é executado. A palavra-chave “break” é usada para sair do bloco e continuar a execução do código após o switch.

Se nenhum dos valores “case” for igual à expressão, o código dentro do bloco “default” será executado, se houver. Se não houver um bloco “default”, o código após o switch será executado sem entrar em nenhum dos case.

Aqui está um exemplo de como usar a instrução “switch” em C:

Neste exemplo, a expressão “opcao” é avaliada e comparada com cada um dos valores “case”. Se a expressão for igual a ‘A’, ‘B’, ou ‘C’, a mensagem de “Opção A escolhida.”, “Opção B escolhida.”, ou “Opção C escolhida.” será impressa respectivamente. Se não for igual a nenhum dos valores acima, “Opção inválida.” será impressa.

for

A instrução “for” é uma estrutura de controle de fluxo que permite que você execute um trecho de código repetidamente enquanto uma determinada condição for verdadeira. A sintaxe geral é:

A inicialização é executada uma vez no início do loop, a condição é verificada antes de cada iteração, e o incremento é executado após cada iteração. Se a condição for verdadeira, o código dentro do bloco será executado. Se a condição for falsa, o loop é interrompido e a execução continua após o loop.

Aqui está um exemplo de como usar a instrução “for” em C:

Neste exemplo, a variável “i” é inicializada com o valor 0, a condição “i < 10” é verificada antes de cada iteração, e o incremento “i++” é executado após cada iteração. O código dentro do loop imprime o valor de “i” em cada iteração, e o loop é executado 10 vezes, até que a condição “i < 10” se torne falsa.

while

A instrução “while” é uma estrutura de controle de fluxo que permite que você execute um trecho de código repetidamente enquanto uma determinada condição for verdadeira. A sintaxe geral é:

A condição é verificada antes de cada iteração. Se a condição for verdadeira, o código dentro do bloco será executado. Se a condição for falsa, o loop é interrompido e a execução continua após o loop.

Aqui está um exemplo de como usar a instrução “while” em C:

Neste exemplo, a variável “i” é inicializada com o valor 0, e a condição “i < 10” é verificada antes de cada iteração. O código dentro do loop imprime o valor de “i” em cada iteração, e o incremento “i++” é executado após cada iteração, e o loop é executado 10 vezes, até que a condição “i < 10” se torne falsa.

do-while

A instrução “do-while” é uma estrutura de controle de fluxo semelhante à instrução “while”, mas com uma diferença importante: o código dentro do loop é executado pelo menos uma vez, independentemente da condição. A sintaxe geral é:

A condição é verificada após cada iteração. Se a condição for verdadeira, o código dentro do bloco será executado novamente. Se a condição for falsa, o loop é interrompido e a execução continua após o loop.

Aqui está um exemplo de como usar a instrução “do-while” em C:

Neste exemplo, a variável “i” é inicializada com o valor 0, e o código dentro do loop imprime o valor de “i” em cada iteração, e o incremento “i++” é executado após cada iteração. A condição “i < 10” é verificada após cada iteração e o loop é executado até 10 vezes, até que a condição se torne falsa.

A nota que é importante que a variável “i” seja atualizada dentro do loop, para que ele não execute infinitamente.

O laço “do-while” é útil para situações onde você precisa garantir que o código dentro do loop seja executado pelo menos uma vez, independentemente da condição.

Funções 

As funções são blocos de código que podem ser reutilizados em um programa. Elas permitem que o código seja dividido em partes menores e mais fáceis de entender e manter.

Exemplo:

Neste exemplo, é criada uma função chamada “soma” que recebe dois inteiros como argumentos e retorna um inteiro. A função “soma” é definida logo abaixo da declaração da função. Ela realiza a soma dos dois argumentos e retorna o resultado.

Na função main(), as variáveis “x” e “y” são declaradas e atribuídas os valores 5 e 2, respectivamente. Em seguida, a função “soma” é chamada com os argumentos “x” e “y” e o resultado é armazenado na variável “resultado”. Por fim, o resultado da soma é exibido na tela através da função printf().

O resultado da execução deste programa seria: “5 + 2 = 7”

Vetores e matrizes 

Os vetores são conjuntos de dados do mesmo tipo armazenados em sequência em memória. As matrizes são vetores multidimensionais que permitem armazenar mais de um valor em cada posição.

Exemplo:

Neste exemplo, um vetor de inteiros com 10 elementos é declarado e inicializado com valores. Em seguida, um loop “for” é usado para exibir o conteúdo do vetor na tela.

Também é declarada uma matriz de inteiros com 3 linhas e 2 colunas e inicializada com valores. Em seguida, um loop aninhado é usado para exibir o conteúdo da matriz na tela.

O resultado da execução deste programa seria: “Conteúdo do vetor: 1 2 3 4 5 6 7 8 9 10 Conteúdo da matriz: 1 2 3 4 5 6”

Ponteiros 

Os ponteiros são variáveis que armazenam endereços de memória de outras variáveis. Eles são amplamente utilizados em C para acessar e manipular dados em memória de maneira mais eficiente.

Exemplo:

Neste exemplo, é declarada uma variável inteira chamada “x” e atribuído o valor 5. Em seguida, é declarado um ponteiro para um inteiro chamado “p” e atribuído o endereço de memória de “x”.

O valor de “x” e o endereço de memória de “x” são exibidos na tela através da função printf(). Em seguida, o valor apontado pelo ponteiro “p” e o endereço de memória armazenado em “p” são exibidos na tela.

O valor apontado pelo ponteiro “p” é então modificado para 10 e o novo valor de “x” é exibido na tela.

O resultado da execução deste programa seria: “x = 5 Endereço de x: 0x7ffc7a70a260 *p = 5 Endereço armazenado em p: 0x7ffc7a70a260 Novo valor de x: 10”

Structs

As “structs” (estruturas) são uma forma de agrupar diferentes tipos de dados em um único bloco de memória. Elas são muito úteis quando precisamos armazenar e gerenciar informações complexas, como registros de banco de dados ou informações de usuários em um sistema.

Por exemplo, imagine que você precise armazenar informações de um conjunto de pessoas, como nome, idade e sexo. Em vez de criar três variáveis diferentes para cada pessoa, você pode criar uma struct chamada “Pessoa” com esses campos e armazenar todas as informações em uma única variável do tipo “Pessoa”.

A sintaxe para criar uma struct em C é a seguinte:

Exemplo:

Strings

Em C, uma string é uma sequência de caracteres. Ela é representada por um vetor de caracteres, onde o último elemento é um caractere nulo (‘\0’).

Por exemplo, a string “Olá, mundo!” pode ser representada como um vetor de caracteres da seguinte forma:

Para trabalhar com strings em C, existem várias funções disponíveis na biblioteca “string.h”. Algumas das funções mais comuns são:

  • strlen(): retorna o tamanho de uma string (sem contar o caractere nulo).
  • strcpy(): copia uma string para outra.
  • strcat(): concatena duas strings.
  • strcmp(): compara duas strings.

Aqui está um exemplo de como usar algumas dessas funções:

Exemplo: Converter uma string para maiúsculas ou minúsculas:

Constantes

Em C, as constantes são valores que não podem ser modificados durante a execução do programa. Elas são declaradas com a palavra-chave “const” e podem ser do tipo inteiro, flutuante, caractere ou string.

Aqui estão alguns exemplos de como usar constantes em C:

Declarar uma constante inteira:

Declarar uma constante flutuante:

Modificadores de tipo

Os modificadores de tipo são palavras-chave usadas para modificar o tipo de uma variável ou função em C. Eles permitem especificar propriedades adicionais do tipo, como o tamanho ou o escopo de uma variável.

Os modificadores de tipo mais comuns em C são:

  • “short”: indica que uma variável é do tipo inteiro com tamanho reduzido (geralmente, um short ocupa menos espaço na memória do que um inteiro normal).
  • “long”: indica que uma variável é do tipo inteiro com tamanho aumentado (geralmente, um long ocupa mais espaço na memória do que um inteiro normal).
  • “signed”: indica que uma variável é do tipo inteiro com sinal (pode armazenar valores positivos, negativos e zero).
  • “unsigned”: indica que uma variável é do tipo inteiro sem sinal (só pode armazenar valores positivos e zero).
  • “float”: indica que uma variável é do tipo ponto flutuante com precisão simples.
  • “double”: indica que uma variável é do tipo ponto flutuante com precisão dupla (maior que a de um float).

Aqui estão alguns exemplos de como usar modificadores de tipo em C:

Modificadores de Armazenamento

Os modificadores de armazenamento são palavras-chave usadas para controlar a maneira como as variáveis são armazenadas em memória em C. Eles permitem especificar o escopo e a duração de uma variável, além de sua visibilidade em relação a outras partes do código.

Os modificadores de armazenamento mais comuns em C são:

  • “auto”: indica que uma variável é armazenada na memória do stack e tem escopo de bloco (visível apenas dentro do bloco de código onde é declarada). Este é o modificador de armazenamento padrão em C.
  • “static”: indica que uma variável é armazenada na memória estática e tem escopo de arquivo (visível em todo o arquivo de código onde é declarada). Além disso, uma variável static mantém seu valor entre as chamadas da função onde é declarada.
  • “extern”: indica que uma variável é armazenada em outro lugar e tem escopo de arquivo (visível em todo o arquivo de código onde é declarada). A variável extern é usada para acessar uma variável global declarada em outro arquivo de código.
  • register: é usado para indicar ao compilador que uma variável deve ser armazenada em um registrador, em vez de em uma área de memória, se possível. Isso pode melhorar o desempenho do seu programa, pois acessar um registrador é geralmente mais rápido do que acessar a memória.

Diretivas de pré-compilação 

As diretivas de pré-compilação são instruções especiais inseridas no código-fonte de um programa em C processadas pelo pré-processador antes da compilação propriamente dita. Elas são usadas para incluir arquivos de cabeçalho, definir constantes e macros, e controlar a inclusão ou exclusão de trechos de código baseados em condições pré-definidas.

As diretivas de pré-compilação são identificadas pelo símbolo “#” no início da linha. Algumas das diretivas mais comuns são:

  • “#include”: inclui um arquivo de cabeçalho no código-fonte. Por exemplo:

“#define”: define uma constante ou macro. Por exemplo:

“#ifdef”/”#ifndef”: controla a inclusão de trechos de código baseados em se uma determinada constante ou macro foi definida. Por exemplo:

“#if”/”#elif”/”#else”: controla a inclusão de trechos de código baseados em expressões de teste. Por exemplo:

Compilador GCC

O GCC (GNU Compiler Collection) é uma ferramenta de linha de comando que permite compilar código-fonte escrito na linguagem C. Você pode usá-lo para compilar arquivos “.c” e transformá-los em arquivos executáveis. 

Compilando um código em linguagem C com o GCC

Aqui está como você pode usar o GCC para compilar um arquivo de código fonte C:

  1. Abra o terminal no seu computador.
  2. Navegue até o diretório onde o arquivo de código fonte está localizado. Você pode usar os comandos “cd” e “ls” para navegar pelos diretórios e ver os arquivos disponíveis.
  3. Digite o comando “gcc nome_do_arquivo.c -o nome_do_executavel” e pressione enter para compilar o código. Isso vai criar um arquivo executável com o nome especificado após o -o
  4. Para rodar o código basta digitar ./nome_do_executavel e pressionar enter.

Exemplo:

Compila o arquivo “program.c” e cria um arquivo executável chamado “program”:

Executa o arquivo criado anteriormente.

Além disso, existem algumas opções adicionais que você pode passar para o GCC para controlar a forma como o código é compilado, como -g (para habilitar informações de depuração), -O (para habilitar otimizações de código) e -Wall (para habilitar mensagens de aviso adicionais). Para mais detalhes acesse: Using the GNU Compiler Collection (GCC)

Criando bibliotecas em linguagem C

Para criar uma biblioteca em C, você precisa criar um ou mais arquivos de cabeçalho (.h) que contenham as declarações de função e estruturas de dados que você quer expor para outros programas, e um ou mais arquivos de implementação (.c) que contenham a implementação dessas funções.

Aqui está um exemplo de como criar uma biblioteca simples que expõe uma função para calcular o fatorial de um número inteiro:

Arquivo de cabeçalho (biblioteca.h):

Arquivo de implementação (biblioteca.c):

Para usar essa biblioteca em outro programa, basta incluir o arquivo de cabeçalho e linkar o arquivo de implementação durante a compilação. Por exemplo:

Para compilar esse programa, você pode usar o seguinte comando:

Observação

Para evitar que uma biblioteca em C seja incluída mais de uma vez durante a compilação, você pode usar uma diretiva de pré-processador especial chamada “pragma once”. Essa diretiva indica ao pré-processador do compilador que a biblioteca só deve ser incluída uma vez, independentemente de quantas vezes ela é referenciada no código-fonte.

Para usar a diretiva “pragma once”, basta adicioná-la no início do seu arquivo de cabeçalho (.h). Por exemplo:

Outra opção é usar a diretiva “define” para definir uma macro específica no início do seu arquivo de cabeçalho e, em seguida, verificar se essa macro já foi definida antes de incluir o código da biblioteca. Por exemplo:

Essa abordagem é um pouco mais verbosa, mas pode ser útil em casos em que você quer controlar a inclusão da biblioteca de maneira mais explícita.

Baixe o e-book Domine a Linguagem C

Se quiser ter esse material em PDF, baixe o e-book:

Saiba Mais sobre a linguagem C

Bibliotecas Estáticas e DLL’s em Linguagem C

Técnicas de Mapeamento de Memória em Linguagem C

Objetos em Linguagem C

Estilo de código – Boas práticas de programação em linguagem C

Modificadores de Armazenamento na Linguagem C

Modificadores de Acesso na Linguagem C

Bits em Linguagem C – Conceito e Aplicação

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.
Home » Software » Domine a linguagem C: Tudo o que você precisa saber em um único lugar

JUNTE-SE HOJE À COMUNIDADE EMBARCADOS

Comentários:
Notificações
Notificar
16 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Fabrício dos Santos de Oliveira
Fabrício dos Santos de Oliveira
25/01/2023 09:41

Bom dia! O link de download do e-book de linguagem C não está funcionando. Já tentei em vários computadores e celular e não consegui baixar.

Fabrício dos Santos de Oliveira
Fabrício dos Santos de Oliveira
Reply to  Fábio Souza
25/01/2023 13:37

Ok. Entendido.

Marco Aurelio
Marco Aurelio
24/01/2023 23:52

Boa noite Fabio, uma dúvida: o arquivo de cabeçalho(.h) e o arquivo de implementação
(.c) devem ficar junto em uma mesma pasta?

Edemilso Ilha
Edemilso Ilha
24/01/2023 16:59

Muito bom! Simulei alguns no DEVC++ e estão perfeitos. Só não consegui fazer rodar o GCC como mencionou.
Muito Obrigado!

Paulo Sérgio
Paulo Sérgio
23/01/2023 08:25

muito bom fabio parabens, tem ele em pdf?

Adriano
Adriano
20/01/2023 07:58

Excelente Material!!!
Teria como fazer algo parecido sobre C++ também?

Pedro Antonelli
17/01/2023 08:47

Excelente material, parabéns. Vou indicar quando me pedirem informações sobre a linguagem C.

XAVIER
XAVIER
16/01/2023 16:23

Espetacular este guia Fábio !!!

Lauro
Lauro
15/01/2023 07:56

Ótimo material!!!!

Talvez você goste:
Nenhum resultado encontrado.