Análisis del código ondulado en Github? Necesito ayuda, falta de documentaciones (especialmente definir y macros)

Estoy trabajando en un código producido por una empresa llamada Ripple que proporciona soluciones de pago en varias divisas.

Actualmente estoy parsing el código de su server daemon disponible en Github .

Puede que no sea el primero en llegar a esta conclusión, pero es extremadamente difícil no perderse trabajando en el gran proyecto de otra persona. Aunque se proporciona una documentation, el código aún no me resulta comprensible si no es uno de los creadores.

Una dificultad principal es que el código se refiere a bibliotecas externas y, a veces, se siente imposible saber dónde search para saber qué function tiene o qué valor contiene una variable.


Ejemplo simple de mi pregunta del momento:


Estoy empezando con el file main.cpp (porque supongo que es lo que se inicia cuando se inicia el progtwig) y tengo estas líneas:

#if defined(BEAST_LINUX) || defined(BEAST_MAC) || defined(BEAST_BSD) #include <sys/resource.h> #endif 

Busqué durante una semana pero no puedo encontrar para qué es BEAST_LINUX .

(Es un problema networkingundante donde las macros y las instrucciones preprocessos se llaman con mucha frecuencia, lo que se refiere a #define que hace reference a #define y demás, y rara vez se puede encontrar documentation en la networking).

Además, ¿hay una manera rápida de descubrir dónde se declara una variable en un repository de GitHub, especialmente cuando se declara en otro file?

 #if defined(BEAST_LINUX) || defined(BEAST_MAC) || defined(BEAST_BSD) #include <sys/resource.h> #endif 

Déjame explicarte cómo razonar sobre este código:

Primero, veo que a veces includeá sys/resource.h y, a veces, no lo includeá. El <> me dice que es un encabezado del sistema. Así que este es el código para decidir si se incluye o no un encabezado de sistema particular.

En segundo lugar, veo que la testing es para macros que difieren en que uno dice LINUX , un MAC y un BSD . Sé que estas son plataforms. Y la testing es una o.

Entonces, ahora puedo concluir que si se establece una definición asociada con una de las tres plataforms, entonces incluimos un encabezado de sistema particular.

Perforando sys/resource.h en mi motor de búsqueda favorito, me parece que es parte de la especificación Single UNIX . Y noto que las tres plataforms mencionadas en la macro tienen un legado de UNIX.

Entonces, en conclusión, el código parece include un encabezado SUS en aquellas plataforms que se espera que tengan ese encabezado particular. En particular, no en Windows que no va a tenerlo.

Por cierto, sugiero clonar el repository de git en su propia máquina para que pueda usar las herramientas de búsqueda local en él. Si va a analizar una gran cantidad de código, vale la pena configurar un entorno que pueda contener el código y le permita comstackr y analizarlo, y luego aprender a usar sus herramientas de búsqueda y navigation para evitar el código rápidamente.

Soy uno de los desarrolladores de rippled . Como la otra respuesta alude, esta es una macro que se establece en un valor distinto de cero cuando el código se está comstackndo en una plataforma Linux; si es así, hace que el preprocesador incluya el encabezado específico.

Esta definición fue, originalmente, en una biblioteca llamada Bestia. Gran parte de esa biblioteca se trasladó de Beast a la fuente de Ripple, para ayudar a facilitar la inclusión del impresionante websocket de Beast y las rutinas http en Boost.

Si está trabajando con Windows, hay un proyecto de Visual Studio que, cuando se carga, hace que descubrir símbolos y charts de llamadas de código sea bastante fácil usando las herramientas integradas en Visual Studio.

También tengo una compilation de Doxygen, que produce una buena documentation de classs y comentarios, junto con una reference cruzada. Veré cómo hacer que esté disponible públicamente en la web.

Esto parece ser una macro

 #if (defined (_WIN32) || defined (_WIN64)) #define BEAST_WIN32 1 #define BEAST_WINDOWS 1 #elif defined (BEAST_ANDROID) #undef BEAST_ANDROID #define BEAST_ANDROID 1 #elif defined (LINUX) || defined (__linux__) #define BEAST_LINUX 1 

definido en esta fuente bestia: una asombrosa biblioteca de plataforma cruzada en este file PlatformConfig.h . Esta es una fuente antigua, sin embargo, la nueva biblioteca ya no contiene esta definición. Esta nueva biblioteca se encuentra aquí Beast , también enviada a Boost.

Puede search un repository específico para el código mediante la búsqueda de Github, sin embargo, solo funciona en las últimas versiones de files. Para realizar una búsqueda de todas las versiones de files, deberá hacerlo desde la command-line, como se explica aquí. GitHub: búsqueda a través de versiones anteriores de files . No hay una forma rápida de search definición de variable o macro, excepto si su IDE admite ir a la funcionalidad de definición.