Jump to content
Sign in to follow this  
Cander

Uso apropiado de headers em projetos C/C++

Recommended Posts

Quando estamos desenvolvendo algum tipo de software, seja ele em C ou em C++, é comum dividi-lo em multiplos arquivos, sejam eles Classes ou uma header que perfome algum tipo de operação especifica, minha maior duvida é, como eu devo tratar as headers "compartilhadas" para não precisar declarar mais de uma vez no meu projeto?

Exemplo:

file.h

#idndef _FILE_
#define _FILE

#include <string.h>
#include <sys/types.h>
#include <dirent.h>
  
class File {
  	char* Filename;
  	DIR* Path;
 };
#endif

folder.h

 

#idndef _FOLDER_
#define _FOLDER_

#include <string.h>
#include <sys/types.h>
#include <dirent.h>
  
class Folder {
  	char* folderName;
  	DIR* folderPath;
 };
#endif

 

No exemplo hipotetico acima, temos uma header 'file' e uma header 'folder', ambas precisam da mesma header, string.h, sys/types.h, dirent.h. Sabendo que elas precisam da mesma header, seria uma boa pratica, declarar todas as dependencias numa main.cpp e estruturar de maneira que carregue todas as headers antes de carregar as minhas propias headers?

 

Acabou sendo 2 perguntas :D haha vlw.

Share this post


Link to post
Share on other sites

Não sou expert em C ou C++, mas acredito que em qualquer arquivo que você utilizar algo externo você precisa incluir no seu arquivo. O que pode ser um atalho pra isso é criar uma header que inclua libs de comun uso e chamar apenas essa header que inclui as outras no seu arquivo. 

Aguarde alguém mais experiente responder, mas até onde eu sei essa é a melhor forma.

Abraço! 

  • Agradecer 1

Share this post


Link to post
Share on other sites

Uma boa prática, parecida com o que o pessoal mencionou mas de forma um pouco mais "marota", é fazer o uso de "headers pré-compilados" para acelerar o processo de compilação, o que é importante quando você está trabalhando em um projeto grande com C/C++. 

Um header pré-compilado consiste em um header aonde você pode ter os seus #includes que não devem ser recompilados com frequência e são bastante usados (como coisas da stdlib). 

Isso alivia uma boa parte do trabalho do seu compilador, pois se você inclui o mesmo header em vários arquivos fonte, toda vez que esse fonte é alterado o compilador precisa compilar o seu conteúdo E o conteúdo do header incluído. 

Esse artigo mostra exemplos de como usar um header pré-compilado para gcc, clang e MSVC: http://itscompiling.eu/2017/01/12/precompiled-headers-cpp-compilation/ 

Abraços.

  • Agradecer 2

Share this post


Link to post
Share on other sites

@Cander é isso mesmo que o gobannon disse. Você pode usar pch (Pre compiled header) https://msdn.microsoft.com/en-us/library/szfdksca.aspx .

Se você já criou um projeto no Visual studio com template padrão, concerteza já viu o "stdafx.h" no projeto. Isso é um PCH.

#idndef _FILE_
#define _FILE

#endif

Se você não for fazer nenhuma lib, você pode fazer o seguinte para o código ficar mais claro com relação a isso.

// includes.hpp
#pragma once
  
#include <string.h>
#include <sys/types.h>
#include <dirent.h>
// file.h
#idndef _FILE_
#define _FILE

class File {
  	char* Filename;
  	DIR* Path;
 };
#endif
// folder.h
#idndef _FOLDER_
#define _FOLDER_
  
class Folder {
  	char* folderName;
  	DIR* folderPath;
 };
#endif
// file.cpp
#include "includes.hpp"
#include "file.h"
//folder.cpp
#include "includes.hpp"
#include "folder.h"

 

Eu gosto dessa abordagem, seu header fica limpo de includes e todos os headers que você tem como dependência ficam em 1 só lugar. Configura o includes.hpp como pch e você tem seus problemas resolvidos. 

  • Agradecer 1

Share this post


Link to post
Share on other sites

Exatamente oque eu estava buscando! otimizou bastante o processo, irei começar a usar em meus projetos! vlw a todos

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...