Você está aqui: C ::: Fundamentos da Linguagem ::: Métodos, Procedimentos e Funções

Como escrever uma função C que aceita um número variável de argumentos

Quantidade de visualizações: 8420 vezes
Em algumas situações, pode ser necessário escrever uma função C que aceita um número variável de argumentos. Uma função deste tipo é printf(). Como você sabe, a função printf() nos permite fornecer uma string com marcadores de formatação e um número ilimitado de nomes de variáveis ou valores, que serão avaliados e inseridos em sua devida posição na string resultante.

Na linguagem C, uma função que aceita um número variável de argumentos pode ser criada por meio do uso do tipo va_list e três funções: va_start(), va_arg() e va_end(). Tanto o tipo quanto as funções estão disponíveis no header <stdarg.h>.

O tipo va_list (na verdade um parâmetro para as macros definidas em cstdarg) é usado para guardar informações sobre os argumentos da função. A função va_start() fica encarregada de inicializar um objeto do tipo va_list, de forma que as chamadas à va_arg() possam retornar os argumentos adicionais fornecidos à função que desejamos escrever.

A função va_end(), por sua vez, se encarrega de limpar o objeto va_list e quaisquer outras porções de memória usadas no processo.

Veja um trecho de código no qual temos uma função soma() que recebe quantos argumentos forem necessários (observe que o parâmetro obrigatório é a quantidade de argumentos que serão fornecidos):

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>

// função que recebe um número variável de argumentos
int somar(int n_args, ...){
  int i, soma = 0;
  va_list ap; // declara o objeto va_list
  va_start(ap, n_args); // inicializa va_list
  
  //  percorre os valores no va_list
  for(i = 1; i <= n_args; i++){
    soma = soma + va_arg(ap, int);      
  }
  
  // limpa o objeto va_list
  va_end(ap);
  
  return soma; 
}

int main(int argc, char *argv[]){
  // o valor exibido será 15
  // o valor 4 é usado para informar a quantidade de
  // argumentos sendo fornecidos
  printf("Soma: %d\n\n", somar(4, 5, 3, 2, 5));
  
  system("PAUSE");	
  return 0;
}


Link para compartilhar na Internet ou com seus amigos:

C ::: Dicas & Truques ::: Recursão (Recursividade)

Como escrever uma função recursiva para calcular a potência de um número usando a linguagem C

Quantidade de visualizações: 47935 vezes
Chamamos de potenciação a operação de se elevar um número (uma base) a um determinado expoente e obter sua potência. Veja a figura a seguir:



Veja que aqui o valor 5 foi elevado ao cubo, ou seja, ao expoente 3 e obtemos como resultado sua potência: 125.

O código abaixo mostra como você pode escrever uma função recursiva em C que permite calcular a potência de um número inteiro:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

#include <stdio.h>
#include <stdlib.h>
 
// função recursiva que calcula a potência  de
// um inteiro
int potencia(int base, int expoente)
{
  if(expoente == 0){
    return 1;
  }
  else{
    return base * potencia(base, expoente - 1);
  }
}
 
int main(int argc, char *argv[])
{
  int base = 3;
  int expoente = 4;
 
  printf("%d elevado a %d = %d", base, expoente,
    potencia(base, expoente));
 
  printf("\n\n");
  system("PAUSE");
  return 0;
}

Ao executar este código C nós teremos o seguinte resultado:

3 elevado a 4 = 81


C ::: Dicas & Truques ::: Strings e Caracteres

Como concatenar apenas parte de uma string à outra string usando a função strncat() da linguagem C

Quantidade de visualizações: 9820 vezes
Muitas vezes precisamos adicionar à uma string apenas alguns caracteres de outra, ou seja, não queremos concatenar as duas strings completamente; apenas parte da segunda. Para isso podemos usar a função strncat(). Veja o protótipo e explicação desta função:

char *strncat(char *str1, const char *str2, size_t n);


Aqui a quantidade n de caracteres da string str2 será anexada ao final da string str1. O caractere de fim de string (null character) da str1 é sobrescrito durante a operação e anexado novamente assim que os caracteres desejados da str2 sejam copiados. Veja um exemplo:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[])
{
  char texto[] = "Gosto muito de ";
  char palavra[] = "C++";

  /*
  Na segunda sequencia de caracteres nós temos "C++", mas
  queremos anexar à primeira sequencia apenas "C". Veja
  como isso é feito
  */

  strncat(texto, palavra, 1);

  // exibe o resultado
  puts(texto);

  system("pause");
  return 0;
}

Ao executar este códigos nós teremos o seguinte resultado:

Gosto muito de C


C ::: Dicas & Truques ::: Data e Hora

Como usar o tipo time_t do header <time.h> da linguagem C

Quantidade de visualizações: 5057 vezes
O tipo time_t, presente no header <time.h> é usado quando precisamos representar datas e horas e, quando necessário, efetuar operações aritméticas envolvendo as mesmas. Este tipo é obtido por meio de uma chamada à função time(). Veja:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(int argc, char *argv[]){
  // declara uma variável do tipo time_t e atribui a ela
  // o resultado de uma chamada à função time()
  time_t hora_atual = time(NULL);
  printf("Segundos desde 01/01/1970: %d\n\n", hora_atual);

  system("PAUSE");
  return 0;
}

Ao executar este trecho de código teremos algo parecido com:

Segundos desde 01/01/1970: 1334017044

Como podemos ver, o tipo time_t é apenas um apelido para um long, como declarado no header time.h:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

typedef	long time_t;

Desta forma, time_t guarda a quantidade de segundos decorridos desde a meia-noite do dia 01/01/1970 UTC.


Desafios, Exercícios e Algoritmos Resolvidos de C

Veja mais Dicas e truques de C

Dicas e truques de outras linguagens

Códigos Fonte

Programa de Gestão Financeira Controle de Contas a Pagar e a Receber com Cadastro de Clientes e FornecedoresSoftware de Gestão Financeira com código fonte em PHP, MySQL, Bootstrap, jQuery - Inclui cadastro de clientes, fornecedores e ticket de atendimento
Diga adeus às planilhas do Excel e tenha 100% de controle sobre suas contas a pagar e a receber, gestão de receitas e despesas, cadastro de clientes e fornecedores com fotos e histórico de atendimentos. Código fonte completo e funcional, com instruções para instalação e configuração do banco de dados MySQL. Fácil de modificar e adicionar novas funcionalidades. Clique aqui e saiba mais
Controle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidadesControle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidades
Tenha o seu próprio sistema de controle de estoque web. com cadastro de produtos, categorias, fornecedores, entradas e saídas de produtos, com relatórios por data, margem de lucro e muito mais. Código simples e fácil de modificar. Acompanha instruções para instalação e criação do banco de dados MySQL. Clique aqui e saiba mais

Linguagens Mais Populares

1º lugar: Java
2º lugar: Python
3º lugar: C#
4º lugar: PHP
5º lugar: C
6º lugar: Delphi
7º lugar: JavaScript
8º lugar: C++
9º lugar: VB.NET
10º lugar: Ruby



© 2025 Arquivo de Códigos - Todos os direitos reservados
Neste momento há 27 usuários muito felizes estudando em nosso site.