Ottengo un warning che dice: "dereferencing type-punned pointer will break strict-aliasing rules".
Ho fatto un po' di ricerche e credo di aver capito che si corre il rischio di generare comportamenti indefiniti conseguenti a un trattamento inaffidabile dei registri.
Ora, ho riscritto la funzione in quest'altro modo:
Codice sorgente - presumibilmente C/C++ |
uint64_t converti_nanosecondi_in_nanosecondi_UTC( uint64_t ns ) {
uint64_t ft = 0;
if( LocalFileTimeToFileTime((void*)&ns,(void*)&ft) )
return ft;
return NANOSECONDI_NON_VALIDI;
}
|
Con questa nuova formulazione il warning non mi viene più presentato, ma ho come la sensazione che la sostanza del "gioco" di puntatori non cambi, ripresentando lo stesso potenziale problema di prima, anche se "invisibile" al compilatore.
Che mi dite?
Per la cronaca: SYSTEMTIME è una struttura costituita da due DWORD, quindi dovrebbe occupare 64 bit.
ATTENZIONE! Sono un hobbista e l'affidabilità delle mie conoscenze informatiche è molto limitata. Non prendere come esempio il codice che scrivo, perché non ho alcuna formazione accademica e rischieresti di apprendere pratiche controproducenti.