Sono relativamente nuovo al C++ e sto seguendo una lezione. Alla nostra classe è stato assegnato un laboratorio e il mio insegnante ha detto che la stesura del laboratorio è un po 'difficile da capire; tuttavia, non ha apportato modifiche alla documentazione del laboratorio. Così, mi sono imbattuto in questa parte del laboratorio:Definizione di una macro preprocessore
Definizione di un preprocessore macro
lunga data convenzione capitalizza i nomi delle macro, e questo nome di macro deve essere TRACE_FUNC. La macro ha un singolo parametro, un simbolo che verrà sostituito da un nome di funzione quando si applica la macro al codice. L'inizio della macro è simile al seguente:
#define TRACE_FUNC(symbol) replacement-text`
e il preprocessore sostituirà il testo di sostituzione in tutto il mondo che la (MGS) stringa TRACE_FUNC esiste nel codice sorgente, e mangimi il simbolo in quella sostituzione.
NOTA: l'istruzione #define deve essere su un'unica riga logica. Per mantenere la lunghezza gestibile, puoi sfuggire al carattere di nuova riga con una barra rovesciata alla fine della riga; che manterrà felice il preprocessore permettendoti di estendere una definizione su più linee.
Per questo esercizio, il testo sostitutivo deve essere una dichiarazione completa, incluso il punto e virgola finale.
Il testo sostitutivo deve essere un'istruzione di uscita che stampa il simbolo seguito dal testo() chiamato. e una nuova riga sullo standard output. È possibile copiare e modificare una delle istruzioni di output dal file di origine warning.cpp.
warning.cpp
è solo un file che stiamo utilizzando e TRACE_FUNC
è di essere immessi in un file di intestazione.
Quindi, ho letto questo un paio di volte e non sono sicuro al 100% che cosa sta chiedendo. Guardandolo in un modo, sembra che mi stia chiedendo di creare una macro chiamata TRACE_FUNC. Se lo guardi in un altro modo, mi sta chiedendo di usare la macro TRACE_FUNC. Tutto ciò va bene, ma non so come usare TRACE_FUNC affatto, non riesco a trovare alcuna documentazione su di esso da nessuna parte e non so come creare una macro. Quando ho chiesto aiuto, il mio insegnante ha semplicemente detto. le parole e non quelle che sono state molto utili perché è stata una risposta molto tortuosa e confusa senza spiegazione di cosa sia effettivamente TRACE_FUNC.
Fondamentalmente, tutto ciò che il mio insegnante ha detto è che il simbolo all'interno di TRACE_FUNC
deve essere il nome di una delle funzioni nel codice sorgente. Ad esempio, supponiamo di avere una funzione foo()
all'interno di un avviso, quindi il simbolo dovrebbe essere foo()
(o foo, non ne sono sicuro neanche io), dalla sua spiegazione. Inoltre, nel testo sostitutivo, apparentemente il nome stesso verrà sostituito se metto #
davanti al simbolo. Ho pensato che dovrei denotare le direttive del preprocessore. Perché dovrei usarlo qui?
In ogni caso, fare ciò che dice il mio insegnante praticamente non fa nulla. Né questa linea
#define TRACE_FUNC(foo()) #foo() called. ;
né questa linea
#define TRACE_FUNC(foo) #foo() called. ;
sostituire qualsiasi testo, che sono abbastanza sicuro che è il funzionamento della direttiva #define.Quindi devo applicare quello che ha detto la mia insegnante nel modo sbagliato, ma non so davvero perché è sbagliato o come risolverlo.
Quindi, la mia domanda. TRACE_FUNC
è effettivamente una macro e se sì, c'è qualche documentazione su di esso che posso leggere? O dovrei creare TRACE_FUNC
e se sì, esattamente come dovrei farlo?
Grazie! Questo era molto più chiaro di quello che stava dicendo la mia insegnante. – FoolishOrpheus
Considerare anche http://stackoverflow.com/a/257425/1689451 su come definire i macro delle funzioni. –