Ben si, il aime.
Sauf si tu compiles en C++, bien entendu...
Ben si, il aime.
Sauf si tu compiles en C++, bien entendu...
en effet je compile en c++ mais je ne trouve pas ca logique en c!
C'est pourtant la norme du C.
void* est implicitement convertible dans les deux sens...
Ça permet de faire cette définition de NULL pour la plupart des compilateurs, réservant ainsi NULL aux pointeurs:
Je dis la plupart, car il me semble que certains compilateurs possèdent une définition interne, genre #define NULL __null...
Code : Sélectionner tout - Visualiser dans une fenêtre à part #define NULL ((void*)0)
C'est pas logique et c'est un trou dans le système de types du C.Envoyé par jerem2000
Moi je n'ai fait que de te donner une solution en C ANSI/ISO rien d'autre, après si tu compiles en C++ c'est toi qui vois mais moi je ne compile qu'en CEnvoyé par jerem2000
Moi, je compile le C en C et le C++ en C++, comme toute personne devrait le faire...
Tu n'as pas oublié de faire + 1 pour le zéro terminal au moins ?Envoyé par jerem2000
Pourquoi ?Envoyé par Jean-Marc.Bourguet
la fonction renvoi du void donc pas de return et on recup un char * ! bizar comme procédé qd meme!
void*, pas void tout court...
void* étant le type de pointeur générique.
D'ailleurs, en C ou il n'existe qu'un seul opérateur de transtypage, la conversion implicite de void* est un bon moyen d'éviter les risques de perdre de la const-correctness en convertissant un pointeur...
Rien de bizzard, c'est LE type générique du Langage C, il permet de stocker n'importe quel type de données mais c'est fait implicitement dans ce langage, d'où la possibilité de ne pas faire de cast comme par exemple dans les malloc, une fois que tu aura programmé quelques années avec, ca te semblera moins bizzardEnvoyé par jerem2000
La conversion implicite de void* en un autre type de pointeur continue a me sembler bizarre.Envoyé par Franck.H
Pour la raison que j'ai donnée, je pense qu'elle est préférable à la nécessité d'une conversion explicite.
Ce problème est résolu en C++ par les différents opérateurs de transtypage.
C'est une conversion implicite qui n'est pas garantie de donner un resultat sense.Envoyé par Trap D
Il y en a d'autres qui sont problématiques parce qu'elles perdent une partie de l'information présente (genre float->int) mais au moins elles ont toujours un résultat bien défini.
C'est quoi la raison que tu as donnée? NULL défini a (void*)0? Le permettre n'offre aucun avantage, ce n'est pas garanti.Envoyé par Médinoc
Je ne vois pas le rapport avec la définition de NULL. A moins que tu faisais allusion a autre chose?Ce problème est résolu en C++ par les différents opérateurs de transtypage.
Ce n'est pas à propos de NULL :
D'ailleurs, en C ou il n'existe qu'un seul opérateur de transtypage, la conversion implicite de void* est un bon moyen d'éviter les risques de perdre de la const-correctness en convertissant un pointeur...
Je ne comprends pas ce que tu veux dire.
Oui, mais il faut partir du principe qu'en C on n'a pas de garde-fou, le programmeur est sensé savoir ce qu'il fait. J'ai l'impression que tu raisonnes avec l'optique C++ où je pense, (je n'y connais rien en C++) qu'on est plus guidé et surveillé.Envoyé par Jean-Marc.Bourguet
oui en attendant ce procedé on ne le voi qu'en c et qui n'a pas été repri en c++ donc voila il y a surement une raison enfin je suppose
Il ne faut pas réécrire l'histoire. void* provient du C++, a été repris en C où on a ajouté la conversion implicite vers les autres pointeurs (contre l'avis de D. Ritchie d'ailleurs si je ne me trompe pas).Envoyé par jerem2000
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager