WebKit tiene una gran cantidad de líneas pre-procesador como este: #if MACRO1(MACRO2)
¿Es esta macro declaración legal C++ o algo más? Y si es legal, ¿cómo funciona
Por ejemplo:
#if PLATFORM(MAC) || (PLATFORM(QT) && USE(QTKIT))
#include "MediaPlayerPrivateQTKit.h"
#if USE(AVFOUNDATION)
#include "MediaPlayerPrivateAVFoundationObjC.h"
#endif
...
Así que lo primero que pensé fue que estaban función similar macros, pero no veo cómo funcionaría eso, y no pude encontrar #defines para estas macros en ninguna parte del código fuente.
Le pregunté a otro ingeniero qué era y nunca antes ha visto varias macros utilizadas así dentro de un #if. Encontré este wiki page que habla de ellos pero todavía no estaba claro para mí de dónde vienen,
Entonces mi pregunta es: ¿Es esto C++ válido o está siendo reemplazado en el código por otra herramienta/lenguaje como CMake u otra cosa, y si es válida C++, ¿hay alguna especificación de la que todos sepan que habla al respecto?
Soy ingeniero de soporte para una herramienta de Análisis estático de C++ que no maneja esta sintaxis. Un cliente nos pidió que lo manejáramos, pero si voy a llevar esto al ingeniero principal, me gustaría no sonar como un idiota :) Así que me gustaría saber si alguien lo sabe.
Dice allí mismo en la página wiki que publicó el enlace que esas macros están definidas en 'Platform.h', ¿buscó ese archivo? –
Técnicamente legal o no, si se compila con algún compilador que admita y un cliente con suficiente influencia lo quiere, debe considerar apoyarlo de todos modos, al menos detrás de una bandera en tiempo de ejecución, posiblemente incluso si está macro-d en CMake o algo mas. Si se trata de CMake-d, entonces podría volver a enviarlo al cliente para que haga que CMake genere el código real que se compila y luego lo analice de forma estática. – Rup
@John bien puede ser generado por los scripts de compilación y no en el proceso de finalización de la fuente. Tradsud, ¿realmente has intentado construir WebKit para ver qué hace? – Rup