Ho un problema, in quanto il seguente codice si descrive da solo.
È possibile ottenere il lineno che si chiama da solo? (C/C++)
1 #include<stdlib.h>
2 #include<stdio.h>
3 void log()
4 {
5 printf("Log [Line:%d]\n",__LINE__);
6 }
7 int main()
8 {
9 log();
10 log();
11 }
Il risultato atteso è
Log [Linea: 9]
Log [Linea: 10]
Ma, il fatto è
Log [Linea: 5]
Log [Linea: 5 ]
No sorprendente, LINE è stato sostituito durante la fase di pre-processo come 5.
la mia domanda è , come progettare la funzione di registro per ottenere il risultato previsto?
Grazie!
Nel caso di C++, si potrebbe anche utilizzare una funzione inline. – waffleman
@waffleman No non è possibile - l'espansione delle macro (della macro '__LINE__') avviene prima che il compilatore veda il codice. –
Una funzione inline non funzionerà - '__LINE__' è una macro del preprocessore, quindi viene sostituita durante il preprocessore, non durante la funzione di inlining. (modifica: ninja'd) – AshleysBrain