Ir ao conteúdo
  • Cadastre-se

Dúvida sobre constantes em c.


claudiogc

Posts recomendados

Bom dia!

 

Preciso fazer um programa em c e para fazê-lo vou usar vários aquivos .c e .h. O que acontece é que existem algumas constantes que eu preciso definir com "#define" e estas constantes prisarão ser acessíveis por todos estes arquivos .c.

 

Queria saber se há um jeito correto, seguindo as boas práticas de programação para se fazer isso. Eu criei um outro arquivo .h chamado "constantes.h", e nele, defini as constantes e depois só o inclui nos arquivos que precisam delas, mas ouvi dizer que não é bom fazer isso, só não sei por quê. Abaixo, um pedaço do meu arquivo, e nos outros .c eu só inclui ele. Qual o melhor jeito de se fazer isso?

 

//constantes.h#ifndef CONSTANTES_H#define CONSTANTES_H#define MAX 5//As outras constantes estão aqui.//Elas precisam ser vistas por outros aquivos .c#endif

 

Obrigado!

Link para o comentário
Compartilhar em outros sites

É comum em grandes projetos possuir um arquivo de configuração centralizado (*.h), mas somente os que sejam adequados para outros programadores ou administradores de sistemas trabalharem.

Variáveis que sejam específicas para a funcionamento do programa, como por exemplo "#define" para logs de erros, costumam ficar no arquivo .c, pois se tornará inacessíveis depois que a biblioteca for compilada (ex: *.o, *.a, *.dll), impedindo que sejam alteradas mesmo após um 'rebuild'.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

É comum em grandes projetos possuir um arquivo de configuração centralizado (*.h), mas somente os que sejam adequados para outros programadores ou administradores de sistemas trabalharem.

Variáveis que sejam específicas para a funcionamento do programa, como por exemplo "#define" para logs de erros, costumam ficar no arquivo .c, pois se tornará inacessíveis depois que a biblioteca for compilada (ex: *.o, *.a, *.dll), impedindo que sejam alteradas mesmo após um 'rebuild'.

 

Não entendi muito bem algumas coisas que você disse.

1- O que há nesses arquivos de configuração centralizados, já que os "#defines" ficam no .c?

 

2- Explique melhor esta parte, por favor!

Variáveis que sejam específicas para a funcionamento do programa, como por exemplo "#define" para logs de erros, costumam ficar no arquivo .c, pois se tornará inacessíveis depois que a biblioteca for compilada (ex: *.o, *.a, *.dll), impedindo que sejam alteradas mesmo após um 'rebuild'.
Link para o comentário
Compartilhar em outros sites

Imaginemos um projeto grande, onde trabalhará com arquivos de dados para armazenar cache, ou qualquer outra coisa temporária.

No arquivo de configuração ".h", por exemplo, ficaria a especificação dos diretórios onde os arquivos serão salvos (escolha do usuário, caso queira modificar o padrão).

Os arquivos ".c", depois de compilada as bibliotecas, se tornarão em arquivos ".a", ".o", ".lib" ou ".dll" (alguns são padrões unix outros windows), ou seja, conteúdo binário. Dessa forma, impede que seja trocado o valor dos "#define", mesmo que o projeto (programa) seja recompilado, utilizando as bibliotecas já compiladas.

Então, nos arquivos ".c", poderiam ficar as configurações ("#define") para formatação da saída de logs. Já que ele será útil apenas para o programa e não para o "usuário".

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

Pois é, eu li isso aqui, e apesar de entender inglês, não entendi muito bem o que o cara quis dizer.

It is better to have multiple header files with specific related items rather than having one massive header file that contains all items. This is so that when you touch a header file, only the dependent files are recompiled instead of all the files being recompiled.
Link para o comentário
Compartilhar em outros sites

Vale lembrar que protótipos de funções e declarações de structs também ficam nos headers.

E é claro, se você tem funções definidas em CALCULO.C, os protótipos devem ficar no contexto, portanto em CALCULO.H

Um exemplo de calculo.c

#include "calculo.h"int soma(int a, int {    return a + b;}
calculo.h

#ifndef CALCULO_H#define CALCULO_Hint soma(int, int);#endif
main.c

include <stdio.h>#include "calculo.h"...printf("%d\n", soma(1, 2));
  • Curtir 2
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!