Conversion de pointeurs en entiers pour une compatibilité 64 bits
Une base de code existante, conçue à l'origine pour une machine 32 bits, utilise une fonction avec un argument void* qui est ensuite converti en un type approprié dans la fonction :
void function(MESSAGE_ID id, void* param) { if(id == FOO) { int real_param = (int)param; // ... } }
Lors de l'adaptation de ce code à un environnement 64 bits, le compilateur signale une erreur :
error: cast from 'void*' to 'int' loses precision
Pour résoudre ce problème, une modification est requise pour maintenir également la compatibilité avec les machines 32 bits.
Solution
Pour une approche C moderne, reinterpret_cast#include
Type entier correct pour le stockage des pointeurs
Le type de données recommandé pour stocker les pointeurs sous forme d'entiers est uintptr_t ou intptr_t. Ces types résident dans le répertoire
Opérateur de casting approprié
En C , reinterpret_cast est le mécanisme de casting préféré pour cette conversion. Il remplace l'opérateur de conversion de style C, qui n'est plus favorisé en C .
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!