WebKit ha un sacco di linee pre-processore come questo: #if MACRO1(MACRO2)
Questa istruzione macro è legale in C++ o qualcos'altro? E se è legale come funziona
Ad esempio:
#if PLATFORM(MAC) || (PLATFORM(QT) && USE(QTKIT))
#include "MediaPlayerPrivateQTKit.h"
#if USE(AVFOUNDATION)
#include "MediaPlayerPrivateAVFoundationObjC.h"
#endif
...
Così il mio primo pensiero è stato che erano funzione simile macro, ma non riesco a vedere come funzionerebbe, e non ho trovato nessun #define per queste macro ovunque nel codice sorgente.
Ho chiesto a un altro ingegnere cosa fosse e non ha mai visto più macro utilizzate in un #if prima di entrambi. Ho trovato questo wiki page che parla di loro, ma non era ancora chiaro per me da dove vengono,
Quindi la mia domanda, allora: È questo valido C++ o è esso che è sostituito nel codice da un altro strumento/lingua come CMake o qualcos'altro, e se è valido C++ c'è una specifica che qualcuno è a conoscenza di ciò che parla di questo?
Sono un tecnico di supporto per uno strumento di analisi statica C++ che non sta gestendo questa sintassi. Un cliente ci ha chiesto di gestirlo, ma se ho intenzione di portarlo all'ingegnere anziano non mi piacerebbe sembrare un idiota :) Quindi mi piacerebbe il nocciolo duro se qualcuno lo sa.
Dice proprio lì nella pagina wiki che hai postato il link per il fatto che quelle macro sono definite in 'Platform.h', hai cercato quel file? –
Tecnicamente legale o no, se si costruisce con un compilatore che si supporta e un cliente con un peso sufficiente lo vuole, allora si dovrebbe prendere in considerazione di supportarlo comunque, almeno dietro un flag di runtime, forse anche se è macro-d in da CMake o qualcos'altro. Se è CMake-d in poi, potresti spingerlo indietro al cliente per convincerli a fare in modo che CMake generi il codice vero e proprio che viene compilato, quindi analizzarlo statico? – Rup
@John potrebbe essere generato dagli script di compilazione e non nel controllo dell'origine. Tradsud, hai davvero provato a costruire WebKit per vedere cosa fa? – Rup