Oggi mi sono imbattuto in un bug curioso che in qualche modo sono riuscito a evitare fino ad ora.Generazione di un errore nelle definizioni in conflitto con il collegamento in linea
file1.cpp:
#include <iostream>
inline void print() { std::cout << "Print1\n"; }
void y() { print(); }
file2.cpp:
#include <iostream>
inline void print() { std::cout << "Print2\n"; }
void x() { print(); }
main.cpp:
int x();
int y();
int main(){
x();
y();
}
Uscita:
Print1 (Expected Print2)
Print1
Poiché print()
ha linkage linea, questo produce nessun errore definizione multipla (compilato con g++ -Wall file1.cpp file2.cpp main.cpp
) e il simbolo duplicato è silenziosamente collassato. Il caso reale in cui l'ho visto era con metodi di classe inline, non esplicite funzioni inline, ma l'effetto è lo stesso.
Mi chiedo se è disponibile un'opzione di collegamento o simile che consentirà di generare un avviso quando viene eseguito questo tipo di errore?
Non credo che stamperà 'Print1 Print1'. Dovrebbe anche stampare 'Print2'. – Nawaz