Sono (stavo) utilizzando i macro __FILE__
e __LINE__
per stampare i messaggi diagnostici dal mio codice. Funziona abbastanza bene quando usi GCC con make, il file è corto come lo hai specificato sulla riga di comando. Recentemente ho passato a usare CodeLite che utilizza nomi di file completi (almeno sotto Windows) durante la creazione. All'improvviso la mia uscita diagnostica non è quasi leggibile.Come ottenere solo il nome del file nel preprocessore?
C'è un modo per ottenere solo il componente file del nome file nel preprocessore? Posso vivere con una soluzione specifica GCC non portatile. (I passano a semplici __FILE__
altri casi.)
sicuro di poter passare il contenuto di __FILE__
tramite una funzione ed estrarre solo la componente del file, ma le operazioni di stringa non era quello che avevo in mente per messaggi di diagnostica che non dovrebbe cambiare comportamento di runtime ...
NOTA: Uso il nome del file nel modo in cui GNU lo utilizza. Un percorso è una raccolta di nomi di file e un nome file è un identificatore relativo o assoluto di un file. Un nome file può essere costituito da un componente di directory e un componente di file.
La diagnostica modifica il comportamento in fase di esecuzione (altrimenti non ci sarebbe diagnostica), e se si chiama una funzione extra fa poca differenza, poiché l'output stesso chiama le funzioni della libreria per fare comunque l'output. – eudoxos
La stampa di un messaggio diagnostico di solito comporta, oltre a dozzine di operazioni con le stringhe, alcune azioni di I/O su file non molto benigne. Per qualche motivo nessuno sembra essere preoccupato per questo. Perché preoccuparsi di aggiungere una chiamata a un'altra funzione senza effetti collaterali che interessa solo i messaggi diagnostici? –
Entrambi avete ragione, aggiungere la diagnostica non è senza effetti. L'ho implementato in quel modo, l'ho lasciato passare attraverso una funzione. Mi stavo chiedendo più spesso che esista qualcosa del genere. Di certo non è standard, ma trovare documentazione su questo non è perfetto. (Anche il manuale di gcc non delinea tutte le macro predefinite.) – rioki