Quando il C printf()
e la sua famiglia sono compilati da gcc
e -Wall
viene utilizzato sulla riga di comando, il compilatore avverte sugli argomenti fuori posto in base alla stringa di formato che viene utilizzata. Ad esempio il codice seguente otterrebbe un messaggio di errore che dice che il formato ha specificato 3 argomenti ma in realtà hai solo passato in due.printf() argomenti wrapper da verificare gcc
printf("%d%d%d", 1, 2);
Quando si scrive un wrapper alla printf()
, come si fa a mantenere questa capacità? Una forma di funzione o una macro sarebbe ciò a cui riesco a pensare. Ma anche i parser semplici potrebbero essere accettabili.
Sullo stackoverflow è possibile trovare alcuni modi di scrivere un wrapper di printf. Due approcci comuni sono using vprintf with varargs e using __builtin_apply. Ho provato questi due approcci, nessuno ha funzionato.
impressionante! funziona perfettamente! – minghua
una nota se 'my_printf' è un membro della classe: aggiungi 1 alla numerazione degli argomenti. diventerebbe '__attributo__ ((format (printf, 3, 4)));' – minghua