Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Randolf Carter
#define MAX 30 int main (void) { int tab[MAX]; }
Pas de problème.
#include <stdlib.h> int main (int argc, char **argv) { int max=atoi(argv[1]); int tab[max]; }
Non, car il s'agit ici d'une allocation dynamique. Dynamique = la taille à allouer n'est pas connu à la compilation mais seulement à l'exécution. Si tu tiens absolument à allouer dynamiquement sur la pile tu peux utiliser l'appel alloca() sinon c'est sur la heap avec malloc().
void truc (int n) { int tab[n]; }
Même topo que ci dessus.
int main(void) { int n=5; }
Euh tu voulais appeler truc(n) là non ?
#include <stdio.h> void truc (int n) { int tab[n]; } int main(void) { int n; scanf("%d", &n); }
Même commentaire.
Merci !
De rien.
-- - Randolf
#define MAX 30
int main (void)
{
int tab[MAX];
}
Pas de problème.
#include <stdlib.h>
int main (int argc, char **argv)
{
int max=atoi(argv[1]);
int tab[max];
}
Non, car il s'agit ici d'une allocation dynamique.
Dynamique = la taille à allouer n'est pas connu à la compilation mais
seulement à l'exécution. Si tu tiens absolument à allouer dynamiquement sur
la pile tu peux utiliser l'appel alloca() sinon c'est sur la heap avec
malloc().
void truc (int n)
{
int tab[n];
}
Même topo que ci dessus.
int main(void)
{
int n=5;
}
Euh tu voulais appeler truc(n) là non ?
#include <stdio.h>
void truc (int n)
{
int tab[n];
}
int main(void)
{
int n;
scanf("%d", &n);
}
#include <stdlib.h> int main (int argc, char **argv) { int max=atoi(argv[1]); int tab[max]; }
Non, car il s'agit ici d'une allocation dynamique. Dynamique = la taille à allouer n'est pas connu à la compilation mais seulement à l'exécution. Si tu tiens absolument à allouer dynamiquement sur la pile tu peux utiliser l'appel alloca() sinon c'est sur la heap avec malloc().
void truc (int n) { int tab[n]; }
Même topo que ci dessus.
int main(void) { int n=5; }
Euh tu voulais appeler truc(n) là non ?
#include <stdio.h> void truc (int n) { int tab[n]; } int main(void) { int n; scanf("%d", &n); }
Même commentaire.
Merci !
De rien.
-- - Randolf
Marc Lasson
Randolf Carter wrote:
#include <stdlib.h> int main (int argc, char **argv) { int max=atoi(argv[1]); attention : si argc = 1, ca peut faire trés mal ...
int tab[max]; }
Non, car il s'agit ici d'une allocation dynamique. Dynamique = la taille à allouer n'est pas connu à la compilation mais seulement à l'exécution. Si tu tiens absolument à allouer dynamiquement sur la pile tu peux utiliser l'appel alloca() sinon c'est sur la heap avec malloc().
En C99, c'est permis.
void truc (int n) { int tab[n]; }
Même topo que ci dessus. Idem ;).
-- Marc.
Randolf Carter wrote:
#include <stdlib.h>
int main (int argc, char **argv)
{
int max=atoi(argv[1]);
attention : si argc = 1, ca peut faire trés mal ...
int tab[max];
}
Non, car il s'agit ici d'une allocation dynamique.
Dynamique = la taille à allouer n'est pas connu à la compilation mais
seulement à l'exécution. Si tu tiens absolument à allouer dynamiquement sur
la pile tu peux utiliser l'appel alloca() sinon c'est sur la heap avec
malloc().
#include <stdlib.h> int main (int argc, char **argv) { int max=atoi(argv[1]); attention : si argc = 1, ca peut faire trés mal ...
int tab[max]; }
Non, car il s'agit ici d'une allocation dynamique. Dynamique = la taille à allouer n'est pas connu à la compilation mais seulement à l'exécution. Si tu tiens absolument à allouer dynamiquement sur la pile tu peux utiliser l'appel alloca() sinon c'est sur la heap avec malloc().
En C99, c'est permis.
void truc (int n) { int tab[n]; }
Même topo que ci dessus. Idem ;).
-- Marc.
SoULiAne
Le Tue, 13 Jan 2004 21:23:21 +0100, "Randolf Carter"
Euh tu voulais appeler truc(n) là non ? Oui oui désolé :) ...
Donc celui là :
void truc (int n) { int tab[n]; } int main(void) { int n=5; truc(n); }
est faux ? Le compilateur ne voit-il pas que n n'est pas modifié dans tout le programme ? Pendant la compilation, les fonctions sont-elles traitées indépendemment les unes des autres ?
Le Tue, 13 Jan 2004 21:23:21 +0100, "Randolf Carter"
Euh tu voulais appeler truc(n) là non ?
Oui oui désolé :) ...
Donc celui là :
void truc (int n)
{
int tab[n];
}
int main(void)
{
int n=5;
truc(n);
}
est faux ?
Le compilateur ne voit-il pas que n n'est pas modifié dans tout le
programme ? Pendant la compilation, les fonctions sont-elles traitées
indépendemment les unes des autres ?
Le Tue, 13 Jan 2004 21:23:21 +0100, "Randolf Carter"
Euh tu voulais appeler truc(n) là non ? Oui oui désolé :) ...
Donc celui là :
void truc (int n) { int tab[n]; } int main(void) { int n=5; truc(n); }
est faux ? Le compilateur ne voit-il pas que n n'est pas modifié dans tout le programme ? Pendant la compilation, les fonctions sont-elles traitées indépendemment les unes des autres ?
SoULiAne
Le Tue, 13 Jan 2004 22:10:11 +0100, Marc Lasson
En C99, c'est permis.
Ne sait meme pas ce que c'est :)
Pourquoi est ce permis ? Est-il automatiquement géré comme un tableau dynamique (j'entend par là, sans que la personne qui fait son programme n'ait a s'occuper de la mémoire) ?
Le Tue, 13 Jan 2004 22:10:11 +0100, Marc Lasson
En C99, c'est permis.
Ne sait meme pas ce que c'est :)
Pourquoi est ce permis ? Est-il automatiquement géré comme un tableau
dynamique (j'entend par là, sans que la personne qui fait son programme
n'ait a s'occuper de la mémoire) ?
Pourquoi est ce permis ? Est-il automatiquement géré comme un tableau dynamique (j'entend par là, sans que la personne qui fait son programme n'ait a s'occuper de la mémoire) ?
Éric Lévénez
Le 13/01/04 22:35, dans , « SoULiAne » a écrit :
Le Tue, 13 Jan 2004 22:10:11 +0100, Marc Lasson
En C99, c'est permis.
Ne sait meme pas ce que c'est :)
C'est le petit nom de la norme ISO du langage C actuelle.
Tout est expliqué dans la FAQ.
Pourquoi est ce permis ?
Parce que c'est dans la norme du langage.
Est-il automatiquement géré comme un tableau dynamique (j'entend par là, sans que la personne qui fait son programme n'ait a s'occuper de la mémoire) ?
Oui, mais il ne faut pas faire des tableaux trop grands car il n'y a pas de code de retour en cas d'erreur d'allocation comme avec un malloc.
-- Éric Lévénez -- <http://www.levenez.com/> Unix is not only an OS, it's a way of life.
Le 13/01/04 22:35, dans <10p8009ovlvn2j5cmhl5q07fgcsjc51375@4ax.com>,
« SoULiAne » <cubixNOSPAM@caramail.com> a écrit :
Le Tue, 13 Jan 2004 22:10:11 +0100, Marc Lasson
En C99, c'est permis.
Ne sait meme pas ce que c'est :)
C'est le petit nom de la norme ISO du langage C actuelle.
Tout est expliqué dans la FAQ.
Pourquoi est ce permis ?
Parce que c'est dans la norme du langage.
Est-il automatiquement géré comme un tableau
dynamique (j'entend par là, sans que la personne qui fait son programme
n'ait a s'occuper de la mémoire) ?
Oui, mais il ne faut pas faire des tableaux trop grands car il n'y a pas de
code de retour en cas d'erreur d'allocation comme avec un malloc.
--
Éric Lévénez -- <http://www.levenez.com/>
Unix is not only an OS, it's a way of life.
C'est le petit nom de la norme ISO du langage C actuelle.
Tout est expliqué dans la FAQ.
Pourquoi est ce permis ?
Parce que c'est dans la norme du langage.
Est-il automatiquement géré comme un tableau dynamique (j'entend par là, sans que la personne qui fait son programme n'ait a s'occuper de la mémoire) ?
Oui, mais il ne faut pas faire des tableaux trop grands car il n'y a pas de code de retour en cas d'erreur d'allocation comme avec un malloc.
-- Éric Lévénez -- <http://www.levenez.com/> Unix is not only an OS, it's a way of life.
Marc Lasson
SoULiAne wrote:
Le Tue, 13 Jan 2004 22:10:11 +0100, Marc Lasson
En C99, c'est permis.
Ne sait meme pas ce que c'est :) C'est la derniere norme du C (ie si tu as un compilateur récent, ca
devrait à peu près marcher).
Pourquoi est ce permis ? Parceque. Je sais pas moi, mais ils doivent bien avoir de bonnes raisons
les grandes gens.
Est-il automatiquement géré comme un tableau dynamique (j'entend par là, sans que la personne qui fait son programme n'ait a s'occuper de la mémoire) ? (je suis pas sur d'avoir compris la question)
Oui, tu n'as pas à t'occuper de la mémoire. Le problème c'est que justement si tu fais ca dans une fonction recursive appellée un nombre suffisant de fois, ca risque d'imploser. Alors qu'avec un malloc() tu aurai pu gérer le manque de mémoire. Mais je pense qu'avec la fonction proposé par Randolf, le comportement est le même que celui avec le tableau à taille variable (il n'y a pas de gestion d'erreur avec alloca).
Je peux me tromper (ça arrive souvent d'ailleurs ;)).
-- Marc.
SoULiAne wrote:
Le Tue, 13 Jan 2004 22:10:11 +0100, Marc Lasson
En C99, c'est permis.
Ne sait meme pas ce que c'est :)
C'est la derniere norme du C (ie si tu as un compilateur récent, ca
devrait à peu près marcher).
Pourquoi est ce permis ?
Parceque. Je sais pas moi, mais ils doivent bien avoir de bonnes raisons
les grandes gens.
Est-il automatiquement géré comme un tableau
dynamique (j'entend par là, sans que la personne qui fait son programme
n'ait a s'occuper de la mémoire) ?
(je suis pas sur d'avoir compris la question)
Oui, tu n'as pas à t'occuper de la mémoire.
Le problème c'est que justement si tu fais ca dans une fonction
recursive appellée un nombre suffisant de fois, ca risque d'imploser.
Alors qu'avec un malloc() tu aurai pu gérer le manque de mémoire.
Mais je pense qu'avec la fonction proposé par Randolf, le comportement
est le même que celui avec le tableau à taille variable (il n'y a
pas de gestion d'erreur avec alloca).
Je peux me tromper (ça arrive souvent d'ailleurs ;)).
Ne sait meme pas ce que c'est :) C'est la derniere norme du C (ie si tu as un compilateur récent, ca
devrait à peu près marcher).
Pourquoi est ce permis ? Parceque. Je sais pas moi, mais ils doivent bien avoir de bonnes raisons
les grandes gens.
Est-il automatiquement géré comme un tableau dynamique (j'entend par là, sans que la personne qui fait son programme n'ait a s'occuper de la mémoire) ? (je suis pas sur d'avoir compris la question)
Oui, tu n'as pas à t'occuper de la mémoire. Le problème c'est que justement si tu fais ca dans une fonction recursive appellée un nombre suffisant de fois, ca risque d'imploser. Alors qu'avec un malloc() tu aurai pu gérer le manque de mémoire. Mais je pense qu'avec la fonction proposé par Randolf, le comportement est le même que celui avec le tableau à taille variable (il n'y a pas de gestion d'erreur avec alloca).
Je peux me tromper (ça arrive souvent d'ailleurs ;)).
-- Marc.
Marc Lasson
SoULiAne wrote:
void truc (int n) { int tab[n]; } int main(void) { int n=5; truc(n); }
est faux ? En C89 (la norme avant le C99 ;)), oui.
Le compilateur ne voit-il pas que n n'est pas modifié dans tout le programme ? Non, tu lui en demande trop, le compilateur ne compile que des sources
"grammaticalement" valide et le C89 ne défininit pas la déclaration d'un tableau avec une variable (même déclarée "const").
Pendant la compilation, les fonctions sont-elles traitées indépendemment les unes des autres ? Je ne sais pas, il faudrai demander à ceux qui font des compilateurs C.
<a prendre avec des pinces> Mais, j'ai "l'intuition" que oui (à part peut-être dans les cas d'inlining), car de tels optimisations me semblent vraiment compliquées. </a prendre avec des pinces>
-- Marc, hésitant.
SoULiAne wrote:
void truc (int n)
{
int tab[n];
}
int main(void)
{
int n=5;
truc(n);
}
est faux ?
En C89 (la norme avant le C99 ;)), oui.
Le compilateur ne voit-il pas que n n'est pas modifié dans tout le
programme ?
Non, tu lui en demande trop, le compilateur ne compile que des sources
"grammaticalement" valide et le C89 ne défininit pas la déclaration
d'un tableau avec une variable (même déclarée "const").
Pendant la compilation, les fonctions sont-elles traitées
indépendemment les unes des autres ?
Je ne sais pas, il faudrai demander à ceux qui font des compilateurs C.
<a prendre avec des pinces>
Mais, j'ai "l'intuition" que oui (à part peut-être dans les cas
d'inlining), car de tels optimisations me semblent vraiment compliquées.
</a prendre avec des pinces>
void truc (int n) { int tab[n]; } int main(void) { int n=5; truc(n); }
est faux ? En C89 (la norme avant le C99 ;)), oui.
Le compilateur ne voit-il pas que n n'est pas modifié dans tout le programme ? Non, tu lui en demande trop, le compilateur ne compile que des sources
"grammaticalement" valide et le C89 ne défininit pas la déclaration d'un tableau avec une variable (même déclarée "const").
Pendant la compilation, les fonctions sont-elles traitées indépendemment les unes des autres ? Je ne sais pas, il faudrai demander à ceux qui font des compilateurs C.
<a prendre avec des pinces> Mais, j'ai "l'intuition" que oui (à part peut-être dans les cas d'inlining), car de tels optimisations me semblent vraiment compliquées. </a prendre avec des pinces>
-- Marc, hésitant.
Emmanuel Delahaye
In 'fr.comp.lang.c', SoULiAne wrote:
#define MAX 30 int main (void) { int tab[MAX]; }
Ok.
#include <stdlib.h> int main (int argc, char **argv) { int max=atoi(argv[1]); int tab[max];
Uniquement en C99.
}
void truc (int n) { int tab[n];
Uniquement en C99.
} int main(void) { int n=5;
truc (n); /* je suppose... */
}
#include <stdio.h> void truc (int n) { int tab[n];
Uniquement en C99.
} int main(void) { int n; scanf("%d", &n);
truc (n); /* je suppose... */
}
-- -ed- [remove YOURBRA before answering me] The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html C-reference: http://www.dinkumware.com/manuals/reader.aspx?lib=cpp FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/
In 'fr.comp.lang.c', SoULiAne <cubixNOSPAM@caramail.com> wrote:
#define MAX 30
int main (void)
{
int tab[MAX];
}
Ok.
#include <stdlib.h>
int main (int argc, char **argv)
{
int max=atoi(argv[1]);
int tab[max];
Uniquement en C99.
}
void truc (int n)
{
int tab[n];
Uniquement en C99.
}
int main(void)
{
int n=5;
truc (n); /* je suppose... */
}
#include <stdio.h>
void truc (int n)
{
int tab[n];
Uniquement en C99.
}
int main(void)
{
int n;
scanf("%d", &n);
truc (n); /* je suppose... */
}
--
-ed- emdelYOURBRA@noos.fr [remove YOURBRA before answering me]
The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html
C-reference: http://www.dinkumware.com/manuals/reader.aspx?lib=cpp
FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/