Maison > développement back-end > C++ > Comment convertir en toute sécurité des pointeurs en entiers pour une compatibilité 64 bits ?

Comment convertir en toute sécurité des pointeurs en entiers pour une compatibilité 64 bits ?

Susan Sarandon
Libérer: 2024-11-17 06:06:04
original
907 Les gens l'ont consulté

How to Safely Convert Pointers to Integers for 64-Bit Compatibility?

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;
        // ...
    }
}
Copier après la connexion

Lors de l'adaptation de ce code à un environnement 64 bits, le compilateur signale une erreur :

error: cast from 'void*' to 'int' loses precision
Copier après la connexion

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 

void *p;
auto i = reinterpret_cast(p);

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 en-tête pour C99 et l'espace de noms std pour C 11.

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal