Ci sono alcune funzionalità linguistiche che vengono abusate da alcuni programmatori che non hanno imparato meglio. Nel corso del tempo, la tendenza dell'abuso porta a un largo consenso di "pratica / caratteristica X è cattiva" e si propaga in una reazione quasi istintiva di "OMG vedo pratica / caratteristica X in questo codice, questo codice deve essere bruciato"
Le variabili globali o singleton sono un altro grande esempio di questo. È ASSOLUTAMENTE necessario averli e usarli QUANDO è appropriato. Il problema è che il 98% del codice che vedi là fuori, queste pratiche non dovrebbero essere usate.
Come qualcuno che è nuovo della lingua, devi imparare cosa fa ciascuna funzione, ma non scartarla e dimenticarla solo perché hai sentito da qualche parte che è brutto. Scopri perché è sbagliato e impara a codificare in modo migliore in modo da non averne bisogno. Ma dopo aver superato tutto questo, ci saranno momenti in cui il preprocessore è la risposta giusta per certi tipi di problemi.
Il più grande problema con il preprocessore (oltre a non essere dattiloscritto e tutto il resto ...) è che la gente inserisce il codice. Quindi, forse un po 'più di codice, quindi forse un'istruzione if. Quando esegui il debug del codice con il preprocessore, tutto ciò che vedi è il punto di esecuzione sulla tua macro senza alcuna idea utile di ciò che accade dietro di esso.
Come caso estremo, una volta ho lavorato con un ragazzo con oltre 200 macro di linea. Quando aveva bisogno di eseguirne il debug, li copiava e incollava direttamente nel codice in cui era stata usata la macro e rimuoveva tutti i \ 'dalla fine della riga. Poi, quando ha finito, ha rimesso la macro al suo posto, copia-incolla tutto quel codice e ripristina manualmente tutti i '\' alla fine della riga. Ora questo è qualcosa che NON DEVI MAI FARE ... MAI:)