C-toxcore: Não inclua cabeçalhos específicos do sistema operacional em arquivos .h

Criado em 11 set. 2016  ·  5Comentários  ·  Fonte: TokTok/c-toxcore

Atualmente, network.h inclui muitos cabeçalhos específicos de plataforma (como u.h , windows.h e unistd.h ). Devemos confiná-los a um único arquivo (ou alguns arquivos).

Sugiro que criemos uma abstração fina nas facilidades do sistema operacional para rede e outra nas instalações do relógio monotônico. Poderíamos então ter um arquivo por tipo de plataforma (por exemplo, ${module}_win32.c , _unix.c , _osx.c , _posix.c , ...) e compilá-los condicionalmente de acordo com o pré-processador símbolos, assim como já fazemos. A desvantagem é que é um pouco mais sobrecarregado de declaração, porque atualmente aqueles #ifdef s estão dentro de funções que precisarão ser redefinidas para cada plataforma. A vantagem é que não há nenhum ou poucos #ifdef s no código em si, e o código específico da plataforma está em um conjunto de pequenos arquivos em vez de (como está agora) em um arquivo de 1100 linhas misturando abstrações de plataforma com código do aplicativo.

P1 cleanup good first issue

Comentários muito úteis

Que tal fazermos uma interface de "sistema" que possa ser implementada por um "sistema windows" e um "sistema posix" e um "sistema de teste"? O sistema de teste pode ser usado em testes de unidade e simula um sistema sem realmente fazer chamadas de sistema.

Todos 5 comentários

Soa bem

Que tal fazermos uma interface de "sistema" que possa ser implementada por um "sistema windows" e um "sistema posix" e um "sistema de teste"? O sistema de teste pode ser usado em testes de unidade e simula um sistema sem realmente fazer chamadas de sistema.

Eu discordo da sugestão de implementação. Prefiro ver todas as funções em um único arquivo {network,time,...}.c , com #ifdef s usado para agrupar funções que precisam ser escritas de maneira diferente para cada plataforma.

Os benefícios desse método em relação a arquivos separados é que podemos forçar todo o código específico da plataforma como uma função estática e expor uma única API para os níveis mais altos de toxcore. Todos os detalhes de implementação da plataforma serão facilmente visualizados em um único arquivo. As peculiaridades da plataforma exigirão abstração e manipulação em um único arquivo, em vez de em vários arquivos. Isso também tornará o arquivo cmakelists.txt mais fácil de manter (ele já está começando a se afastar de nós). E, posteriormente, a revisão, com nosso sistema de revisão atual.

Não totalmente corrigido

@GrayHatter concordou. Vamos ter um único arquivo implementando as especificações do sistema operacional.

Estou cancelando a atribuição de

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

zetok picture zetok  ·  9Comentários

zetok picture zetok  ·  3Comentários

fabionar picture fabionar  ·  5Comentários

iphydf picture iphydf  ·  10Comentários

zoff99 picture zoff99  ·  4Comentários