Sur le pointeur null en C et les fichiers .h
Yacouba
Messages postés
48
Date d'inscription
Statut
Membre
Dernière intervention
-
bob -
bob -
salut à tous. je debute en C et des questions me gênent(2 pour l'instant) merci de m'eclairer
1)j'ai lu que NULL est defini comme égale à la constante entière 0 ; la ou le bat blesse c'est que c'est censé ne pointer sur ... rien alors que 0=0000 est bien une adresse (le debut de n'importe quel segment ce que j'ai appris en ASM) je ne comprends rien!
2) j'ai observé des fichiers d'en tete mais je ne vois que les prototypes de fonctions mais je cherche a voir surtout la définition(le code source) de ces fonctions. où les trouve t on ?
REM: j'utilise borland c++ sous windows
1)j'ai lu que NULL est defini comme égale à la constante entière 0 ; la ou le bat blesse c'est que c'est censé ne pointer sur ... rien alors que 0=0000 est bien une adresse (le debut de n'importe quel segment ce que j'ai appris en ASM) je ne comprends rien!
2) j'ai observé des fichiers d'en tete mais je ne vois que les prototypes de fonctions mais je cherche a voir surtout la définition(le code source) de ces fonctions. où les trouve t on ?
REM: j'utilise borland c++ sous windows
A voir également:
- Que veut dire vendu par null
- La poste mobile vendu - Accueil - Opérateurs & Forfaits
- Comment ouvrir un fichier null ? - Guide
- Paru vendu - Guide
- Chaque fois qu’un vendeur vend un produit à un client, il inscrit une nouvelle ligne avec la quantité de produit vendu. quels sont, dans l'ordre, les 3 produits les plus vendus par stéphane (en quantité, tous clients confondus) ? - Forum Excel
4 réponses
Salut,
1) Dans mes souvenirs, le C fait en sorte que rien ne se trouve à l'adresse 0 ; un pointeur générique vers cette adresse ne pointe donc sur rien. Dans la bibliothèque standard <stddef.h>, il est effectivement défini comme suit :
2) L'implémentation d'une fonction est dans un fichier .c, qui déclare dans son entête le fichier .h où se trouve le prototype.
-= Fu Xuen =-
1) Dans mes souvenirs, le C fait en sorte que rien ne se trouve à l'adresse 0 ; un pointeur générique vers cette adresse ne pointe donc sur rien. Dans la bibliothèque standard <stddef.h>, il est effectivement défini comme suit :
#define NULL ((void*) 0)
2) L'implémentation d'une fonction est dans un fichier .c, qui déclare dans son entête le fichier .h où se trouve le prototype.
-= Fu Xuen =-
Salut,
1: Ce qu'il faut savoir et qui est suffisant dans un premier temps, je pense, c'est que toutes les implémentations de C te garantisent qu'en affectant NULL à un pointeur celui ne pointera sur aucune adresse physique valide.
2: C'est normal que tu ne trouves pas la définition d'une fonction dans un header car celui ci n'est pas fait pour ça. Il ne doit contenir que le prototype des fonctions, variables, structures, etc que tu souhaites exporter. Tu dois trouver les définitions dans un fichier .c, ex: tonUnite.h contient les déclarations, tonUnite.c contient les définitions.
A++
Sans dieu c'est le néant, avec dieu c'est le néant suprême
SEBASTIEN FAURE.
1: Ce qu'il faut savoir et qui est suffisant dans un premier temps, je pense, c'est que toutes les implémentations de C te garantisent qu'en affectant NULL à un pointeur celui ne pointera sur aucune adresse physique valide.
2: C'est normal que tu ne trouves pas la définition d'une fonction dans un header car celui ci n'est pas fait pour ça. Il ne doit contenir que le prototype des fonctions, variables, structures, etc que tu souhaites exporter. Tu dois trouver les définitions dans un fichier .c, ex: tonUnite.h contient les déclarations, tonUnite.c contient les définitions.
A++
Sans dieu c'est le néant, avec dieu c'est le néant suprême
SEBASTIEN FAURE.
NULL vaut 0
c'est UNE adresse
quelle soit valide ou non en mémoire c'est pas ton problème
PAR CONTRE tu dois blinder tes fonctions pour ne pas utiliser de pointeur qui vaut NULL
exemple
en C:
void freeSecurise(int* p) {
if (p!=NULL)
free(p);
}
en C++:
void freeSecurise(int*& p) {
if (p!=NULL) {
free(p);
p = NULL;
}
}
c'est UNE adresse
quelle soit valide ou non en mémoire c'est pas ton problème
PAR CONTRE tu dois blinder tes fonctions pour ne pas utiliser de pointeur qui vaut NULL
exemple
en C:
void freeSecurise(int* p) {
if (p!=NULL)
free(p);
}
en C++:
void freeSecurise(int*& p) {
if (p!=NULL) {
free(p);
p = NULL;
}
}