Jump to content

Uso apropiado de headers em projetos C/C++


anderson_leite

Recommended Posts

  • Supporter - Nibble
Posted

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.

Posted

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! 

Posted

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.

Posted

@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. 

Archived

This topic is now archived and is closed to further replies.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...