C-toxcore: No incluya encabezados específicos del sistema operativo en archivos .h

Creado en 11 sept. 2016  ·  5Comentarios  ·  Fuente: TokTok/c-toxcore

Actualmente, network.h incluye una gran cantidad de encabezados específicos de la plataforma (como u.h , windows.h y unistd.h ). Deberíamos limitarlos a un solo archivo (o unos pocos archivos).

Sugiero que creemos una pequeña abstracción en las instalaciones del sistema operativo para redes y otra en las del reloj monótono. Entonces podríamos tener un archivo por tipo de plataforma (por ejemplo, ${module}_win32.c , _unix.c , _osx.c , _posix.c , ...) y compilarlos condicionalmente de acuerdo con el preprocesador símbolos, como ya lo hacemos. La desventaja es que es un poco más de gastos de declaración, porque actualmente esos #ifdef s son funciones internas que deberán redefinirse para cada plataforma. La ventaja es que hay pocos #ifdef s en el código mismo, y el código específico de la plataforma está en un conjunto de archivos pequeños en lugar de (como está ahora) en un archivo de 1100 líneas que mezcla abstracciones de la plataforma con código de aplicación.

P1 cleanup good first issue

Comentario más útil

¿Qué tal si hacemos una interfaz de "sistema" que pueda ser implementada por un "sistema de Windows" y un "sistema posix" y un "sistema de prueba"? El sistema de prueba podría usarse en pruebas unitarias y simula un sistema sin realizar llamadas al sistema.

Todos 5 comentarios

Suena bien

¿Qué tal si hacemos una interfaz de "sistema" que pueda ser implementada por un "sistema de Windows" y un "sistema posix" y un "sistema de prueba"? El sistema de prueba podría usarse en pruebas unitarias y simula un sistema sin realizar llamadas al sistema.

No estoy de acuerdo con la sugerencia de implementación. Preferiría ver todas las funciones en un solo archivo {network,time,...}.c , con #ifdef s utilizados para ajustar funciones que deben escribirse de manera diferente para cada plataforma.

Los beneficios de este método sobre archivos separados es que podemos forzar todo el código específico de la plataforma como una función estática y exponer una única API para los niveles más altos de toxcore. Los detalles de implementación de la plataforma se podrán ver fácilmente desde un solo archivo. Las peculiaridades de la plataforma requerirán abstracción y manejo dentro de un solo archivo, en lugar de en varios archivos. También hará que el archivo cmakelists.txt sea más fácil de mantener (ya está empezando a alejarse de nosotros). Y luego revisarlo, con nuestro sistema de revisión actual.

No completamente arreglado

@GrayHatter estuvo de acuerdo. Tengamos un solo archivo que implemente las especificaciones del sistema operativo.

Estoy anulando la asignación de

¿Fue útil esta página
0 / 5 - 0 calificaciones