Je voudrais écrire quelque chose dans le genre :
fonction (const int * const pointeur_source, int * const
pointeur_resultat)
{
// Une variable dimensionnant les données dont la valeur est non
// connue au début de l'exécution de la fonction main(), mais
// connue à la première exécution de la présente fonction
extern const int int_taille_données;
// Variable temporaire statique pour des questions de performance
// Eviter de réaffecter la mémoire à chaque exécution
static int * const p_int_temp > (int * const) malloc (int_taille_données * sizeof (int));
Si j'ai bien compris, ce genre de code ne peut pas marcher dans la
mesure où les variables statiques sont affectées avant même le début
de l'exécution de la première instruction de la fonction main()
écrite par le programmeur.
Comment faire alors, sachant que pour des questions de sécurité du
code, je voudrais que le pointeur soit const (afin d'être sur qu'il
ne puisse être réaffecté par erreur sur une autre zone mémoire) et
qu'il ne soit visible que dans le corps de la fonction ?
Je voudrais écrire quelque chose dans le genre :
fonction (const int * const pointeur_source, int * const
pointeur_resultat)
{
// Une variable dimensionnant les données dont la valeur est non
// connue au début de l'exécution de la fonction main(), mais
// connue à la première exécution de la présente fonction
extern const int int_taille_données;
// Variable temporaire statique pour des questions de performance
// Eviter de réaffecter la mémoire à chaque exécution
static int * const p_int_temp > (int * const) malloc (int_taille_données * sizeof (int));
Si j'ai bien compris, ce genre de code ne peut pas marcher dans la
mesure où les variables statiques sont affectées avant même le début
de l'exécution de la première instruction de la fonction main()
écrite par le programmeur.
Comment faire alors, sachant que pour des questions de sécurité du
code, je voudrais que le pointeur soit const (afin d'être sur qu'il
ne puisse être réaffecté par erreur sur une autre zone mémoire) et
qu'il ne soit visible que dans le corps de la fonction ?
Je voudrais écrire quelque chose dans le genre :
fonction (const int * const pointeur_source, int * const
pointeur_resultat)
{
// Une variable dimensionnant les données dont la valeur est non
// connue au début de l'exécution de la fonction main(), mais
// connue à la première exécution de la présente fonction
extern const int int_taille_données;
// Variable temporaire statique pour des questions de performance
// Eviter de réaffecter la mémoire à chaque exécution
static int * const p_int_temp > (int * const) malloc (int_taille_données * sizeof (int));
Si j'ai bien compris, ce genre de code ne peut pas marcher dans la
mesure où les variables statiques sont affectées avant même le début
de l'exécution de la première instruction de la fonction main()
écrite par le programmeur.
Comment faire alors, sachant que pour des questions de sécurité du
code, je voudrais que le pointeur soit const (afin d'être sur qu'il
ne puisse être réaffecté par erreur sur une autre zone mémoire) et
qu'il ne soit visible que dans le corps de la fonction ?
Premier élément de réponse: en C, "const" est une indication pour le
compilateur, qui signifie à peu près "readonly". Ce n'est pas une
protection contre les erreurs.
...
Changer de langage. Le C n'est pas sûr.
(Bon, en fait ce n'est pas complètement vrai, il y a des moyens de faire
ce que tu veux. Le problème, c'est que si je te les explique, tu vas
apprendre comment changer la valeur d'un pointeur const, donc tu vas
perdre ce qui semble constituer ton objectif.
Et si tu prend ton parti du fait que const ne sert pas à cela, les
magouilles deviennent bruquement inutiles...)
Premier élément de réponse: en C, "const" est une indication pour le
compilateur, qui signifie à peu près "readonly". Ce n'est pas une
protection contre les erreurs.
...
Changer de langage. Le C n'est pas sûr.
(Bon, en fait ce n'est pas complètement vrai, il y a des moyens de faire
ce que tu veux. Le problème, c'est que si je te les explique, tu vas
apprendre comment changer la valeur d'un pointeur const, donc tu vas
perdre ce qui semble constituer ton objectif.
Et si tu prend ton parti du fait que const ne sert pas à cela, les
magouilles deviennent bruquement inutiles...)
Premier élément de réponse: en C, "const" est une indication pour le
compilateur, qui signifie à peu près "readonly". Ce n'est pas une
protection contre les erreurs.
...
Changer de langage. Le C n'est pas sûr.
(Bon, en fait ce n'est pas complètement vrai, il y a des moyens de faire
ce que tu veux. Le problème, c'est que si je te les explique, tu vas
apprendre comment changer la valeur d'un pointeur const, donc tu vas
perdre ce qui semble constituer ton objectif.
Et si tu prend ton parti du fait que const ne sert pas à cela, les
magouilles deviennent bruquement inutiles...)
Bonjour,
Je voudrais écrire quelque chose dans le genre :
fonction (const int * const pointeur_source, int * const
pointeur_resultat)
{
// Une variable dimensionnant les données dont la valeur est non connue
// au début de l'exécution de la fonction main(), mais connue à la
// première exécution de la présente fonction
extern const int int_taille_données;
// Variable temporaire statique pour des questions de performance
// Eviter de réaffecter la mémoire à chaque exécution
static int * const p_int_temp > (int * const) malloc (int_taille_données * sizeof (int));
// Suite du code de la fonction
}
Problème :
Si j'ai bien compris, ce genre de code ne peut pas marcher dans la mesure
où les variables statiques sont affectées avant même le début de
l'exécution de la première instruction de la fonction main() écrite par
le programmeur.
Comment faire alors, sachant que pour des questions de sécurité du code,
je voudrais que le pointeur soit const (afin d'être sur qu'il ne puisse
être réaffecté par erreur sur une autre zone mémoire) et qu'il ne soit
visible que dans le corps de la fonction ?.
Bonjour,
Je voudrais écrire quelque chose dans le genre :
fonction (const int * const pointeur_source, int * const
pointeur_resultat)
{
// Une variable dimensionnant les données dont la valeur est non connue
// au début de l'exécution de la fonction main(), mais connue à la
// première exécution de la présente fonction
extern const int int_taille_données;
// Variable temporaire statique pour des questions de performance
// Eviter de réaffecter la mémoire à chaque exécution
static int * const p_int_temp > (int * const) malloc (int_taille_données * sizeof (int));
// Suite du code de la fonction
}
Problème :
Si j'ai bien compris, ce genre de code ne peut pas marcher dans la mesure
où les variables statiques sont affectées avant même le début de
l'exécution de la première instruction de la fonction main() écrite par
le programmeur.
Comment faire alors, sachant que pour des questions de sécurité du code,
je voudrais que le pointeur soit const (afin d'être sur qu'il ne puisse
être réaffecté par erreur sur une autre zone mémoire) et qu'il ne soit
visible que dans le corps de la fonction ?.
Bonjour,
Je voudrais écrire quelque chose dans le genre :
fonction (const int * const pointeur_source, int * const
pointeur_resultat)
{
// Une variable dimensionnant les données dont la valeur est non connue
// au début de l'exécution de la fonction main(), mais connue à la
// première exécution de la présente fonction
extern const int int_taille_données;
// Variable temporaire statique pour des questions de performance
// Eviter de réaffecter la mémoire à chaque exécution
static int * const p_int_temp > (int * const) malloc (int_taille_données * sizeof (int));
// Suite du code de la fonction
}
Problème :
Si j'ai bien compris, ce genre de code ne peut pas marcher dans la mesure
où les variables statiques sont affectées avant même le début de
l'exécution de la première instruction de la fonction main() écrite par
le programmeur.
Comment faire alors, sachant que pour des questions de sécurité du code,
je voudrais que le pointeur soit const (afin d'être sur qu'il ne puisse
être réaffecté par erreur sur une autre zone mémoire) et qu'il ne soit
visible que dans le corps de la fonction ?.
// Variable temporaire statique pour des questions de performance
// Eviter de réaffecter la mémoire à chaque exécution
static int * const p_int_temp > (int * const) malloc (int_taille_données * sizeof (int));
// Variable temporaire statique pour des questions de performance
// Eviter de réaffecter la mémoire à chaque exécution
static int * const p_int_temp > (int * const) malloc (int_taille_données * sizeof (int));
// Variable temporaire statique pour des questions de performance
// Eviter de réaffecter la mémoire à chaque exécution
static int * const p_int_temp > (int * const) malloc (int_taille_données * sizeof (int));
"Jean-Marie Delapierre" a écrit dans le message
de news:
[couic]
"Jean-Marie Delapierre" <jm.delapierre@9online.fr> a écrit dans le message
de news: pan.2005.08.28.11.48.04.515105@9online.fr...
[couic]
"Jean-Marie Delapierre" a écrit dans le message
de news:
[couic]
"Jean-Marie Delapierre" a écrit dans le message
de news:
[couic]
"Jean-Marie Delapierre" <jm.delapierre@9online.fr> a écrit dans le message
de news: pan.2005.08.28.11.48.04.515105@9online.fr...
[couic]
"Jean-Marie Delapierre" a écrit dans le message
de news:
[couic]
"Jean-Marie Delapierre" a écrit dans le message
de news:
[couic]
"Jean-Marie Delapierre" <jm.delapierre@9online.fr> a écrit dans le message
de news: pan.2005.08.28.11.48.04.515105@9online.fr...
[couic]
"Jean-Marie Delapierre" a écrit dans le message
de news:
[couic]
"Jean-Marie Delapierre" a écrit dans le message
de news:
[couic]
"Jean-Marie Delapierre" <jm.delapierre@9online.fr> a écrit dans le message
de news: pan.2005.08.28.11.48.04.515105@9online.fr...
[couic]
"Jean-Marie Delapierre" a écrit dans le message
de news:
[couic]
"Jean-Marie Delapierre" a écrit dans le message
de news:
[couic]
En fait, voila ce que j'ai fait pour obtenir le fonctionnement voulu :
un fichier static.c contenant juste :
int *p_int_temp;
Dans la fonction main(), le bloc suivant positionné après
l'initialisation de la variable int_taille et avant le premier appel à la
fonction :
{
extern int *p_int_temp > (int *) malloc (int_taille * sizeof (int));
}
Et enfin, le code de la fonction :
fonction (const int * const pointeur_source, int * const pointeur_resultat)
{
extern const int int_taille_données;
extern int * const p_int_temp;
// Suite du code de la fonction
}
La portée du pointeur p_int_temp est limitée au fichier static.c,
au
bloc d'initialisation dans la fonction main() et à la fonction dans
laquelle le pointeur pointe de manière inamovible sur la zone mémoire de
travail.
Voila, ça marche, mais je me demande s'il n'y a pas moyen de faire plus
court et plus propre.
"Jean-Marie Delapierre" <jm.delapierre@9online.fr> a écrit dans le message
de news: pan.2005.08.28.11.48.04.515105@9online.fr...
[couic]
En fait, voila ce que j'ai fait pour obtenir le fonctionnement voulu :
un fichier static.c contenant juste :
int *p_int_temp;
Dans la fonction main(), le bloc suivant positionné après
l'initialisation de la variable int_taille et avant le premier appel à la
fonction :
{
extern int *p_int_temp > (int *) malloc (int_taille * sizeof (int));
}
Et enfin, le code de la fonction :
fonction (const int * const pointeur_source, int * const pointeur_resultat)
{
extern const int int_taille_données;
extern int * const p_int_temp;
// Suite du code de la fonction
}
La portée du pointeur p_int_temp est limitée au fichier static.c,
au
bloc d'initialisation dans la fonction main() et à la fonction dans
laquelle le pointeur pointe de manière inamovible sur la zone mémoire de
travail.
Voila, ça marche, mais je me demande s'il n'y a pas moyen de faire plus
court et plus propre.
"Jean-Marie Delapierre" a écrit dans le message
de news:
[couic]
En fait, voila ce que j'ai fait pour obtenir le fonctionnement voulu :
un fichier static.c contenant juste :
int *p_int_temp;
Dans la fonction main(), le bloc suivant positionné après
l'initialisation de la variable int_taille et avant le premier appel à la
fonction :
{
extern int *p_int_temp > (int *) malloc (int_taille * sizeof (int));
}
Et enfin, le code de la fonction :
fonction (const int * const pointeur_source, int * const pointeur_resultat)
{
extern const int int_taille_données;
extern int * const p_int_temp;
// Suite du code de la fonction
}
La portée du pointeur p_int_temp est limitée au fichier static.c,
au
bloc d'initialisation dans la fonction main() et à la fonction dans
laquelle le pointeur pointe de manière inamovible sur la zone mémoire de
travail.
Voila, ça marche, mais je me demande s'il n'y a pas moyen de faire plus
court et plus propre.
Le Mon, 29 Aug 2005 11:43:14 +0200, Yves ROMAN a écrit :"Jean-Marie Delapierre" a écrit dans le message
de news:
[couic]
En fait, voila ce que j'ai fait pour obtenir le fonctionnement voulu :
un fichier static.c contenant juste :
int *p_int_temp;
Dans la fonction main(), le bloc suivant positionné après
l'initialisation de la variable int_taille et avant le premier appel à la
fonction :
{
extern int *p_int_temp
Argh, une globale publique. Non. Et si tu dois faire ça, fait le bien,
(int *) malloc (int_taille * sizeof (int));
}
Et enfin, le code de la fonction :
fonction (const int * const pointeur_source, int * const pointeur_resultat)
{
extern const int int_taille_données;
extern int * const p_int_temp;
// Suite du code de la fonction
}
La portée du pointeur p_int_temp est limitée au fichier static.c, au
extern int * const p_int_temp;
Le Mon, 29 Aug 2005 11:43:14 +0200, Yves ROMAN a écrit :
"Jean-Marie Delapierre" <jm.delapierre@9online.fr> a écrit dans le message
de news: pan.2005.08.28.11.48.04.515105@9online.fr...
[couic]
En fait, voila ce que j'ai fait pour obtenir le fonctionnement voulu :
un fichier static.c contenant juste :
int *p_int_temp;
Dans la fonction main(), le bloc suivant positionné après
l'initialisation de la variable int_taille et avant le premier appel à la
fonction :
{
extern int *p_int_temp
Argh, une globale publique. Non. Et si tu dois faire ça, fait le bien,
(int *) malloc (int_taille * sizeof (int));
}
Et enfin, le code de la fonction :
fonction (const int * const pointeur_source, int * const pointeur_resultat)
{
extern const int int_taille_données;
extern int * const p_int_temp;
// Suite du code de la fonction
}
La portée du pointeur p_int_temp est limitée au fichier static.c, au
extern int * const p_int_temp;
Le Mon, 29 Aug 2005 11:43:14 +0200, Yves ROMAN a écrit :"Jean-Marie Delapierre" a écrit dans le message
de news:
[couic]
En fait, voila ce que j'ai fait pour obtenir le fonctionnement voulu :
un fichier static.c contenant juste :
int *p_int_temp;
Dans la fonction main(), le bloc suivant positionné après
l'initialisation de la variable int_taille et avant le premier appel à la
fonction :
{
extern int *p_int_temp
Argh, une globale publique. Non. Et si tu dois faire ça, fait le bien,
(int *) malloc (int_taille * sizeof (int));
}
Et enfin, le code de la fonction :
fonction (const int * const pointeur_source, int * const pointeur_resultat)
{
extern const int int_taille_données;
extern int * const p_int_temp;
// Suite du code de la fonction
}
La portée du pointeur p_int_temp est limitée au fichier static.c, au
extern int * const p_int_temp;