Godzil (./2678) :Je parlais pour GCC uniquement, cf le lien posté juste avant
C'est possible, mais pas obligatoire, ça peux être 4
squalyl (./2681) :Ouais mais ton code ne sera pas portable si tu fais ça.
c'est pratique que ça vaille 1, ça permet de copier des octets sans avoir a caster tous les void* en char*.
bearbecue (./2690) :
si tu as un pointeur qui est cense pointer vers une zone de donnees/octets brute, dans ce cas, t'utilise pas un void*, mais genre un unsigned char *, ou un unsigned __int8 *. un void *, ca pointe vers un endroit abstrait
bearbecue (./2690) :
la tu dois de toutes facons quand meme faire un cast explicite pour lire/ecrire dedans, donc je vois franchement pas a quoi ca sert
bearbecue (./14) :
un void *, ca pointe vers un endroit abstrait. ca peut tres bien etre un pointeur sur fonction, une classe, un tableau de donnees compressees, une liste de coordonnees dans l'espace en float3, une vtable, un offset dans un vertex buffer, un handle quelconque qui est en fait un index
6.3.2.3 Pointers
A pointer to void may be converted to or from a pointer to any incomplete or object
type. A pointer to any incomplete or object type may be converted to a pointer to void
and back again; the result shall compare equal to the original pointer.
bearbecue (./23) :
genre des archis tordues ou les pointeurs data/code ne sont pas comparables / dans le meme espace d'adressage ?
bearbecue (./23) :
bon ben je dois etre un peu couillon mais je vois pas ce qui dit qu'une fonction n'est pas un objet dans la section 6.2.4 Oo (jsuis alle voir ca: http://c0x.coding-guidelines.com/6.2.4.html et ca: http://www.open-std.org/jtc1/sc22/wg14/www/docs/C99RationaleV5.10.pdf )
une fonction, en reprenant les termes du 6.2.4, ca peut avoir un storage "static" ou "allocated", il n'y a rien qui me parait contradictoire entre la definition d'un objet et ce qu'est une fonction. apres il y a peut-etre une distinction faite pour les adresses dans des pages avec les droits en execution, mais je vois ca nulle part.. pis de toutes facons c'est architecture-specific tout ca...
J.5 Common extensions
1 The following extensions are widely used in many systems, but are not portable to all
implementations. The inclusion of any extension that may cause a strictly conforming
program to become invalid renders an implementation nonconforming. Examples of such
extensions are new keywords, extra library functions declared in standard headers, or
predefined macros with names that do not begin with an underscore.
J.5.7 Function pointer casts
1 A pointer to an object or to void may be cast to a pointer to a function, allowing data to be invoked as a function (6.5.4).
2 A pointer to a function may be cast to a pointer to an object or to void, allowing a
function to be inspected or modified (for example, by a debugger) (6.5.4).
PpHd (./26) :
1 A pointer to an object or to void may be cast to a pointer to a function, allowing data to be invoked as a function (6.5.4).
bearbecue (./28) :
Folco> ouai, d'ailleurs il me semble que j'ai du poster dur yN du code qui fait ca pour interfacer des delegates C# avec du C++, ca genere des stubs dans une page en execution, qui appellent des fonctions membres, avec le 'this' stocke dans le stub, jsais plus ou c'etait (peut-etre dans videz votre presse-papier)