ayant a l'origine appris le C, j'apprend a présent le C++, et j'ai été
un peu "choqué" de voir que je pouvais faire une déclaration de tableau
ainsi :
int x;
cin>>x;
int tab[x];
je pensais, qu'il n'y avait que 4 méthodes pour déclarer un tableau :
#define MAX 20
int tab[MAX];
ou bien
int tab[20]
ou bien
const int x = 20;
int tab[x];
et enfin
int tab[]={2,3,4};
depuis quand la déclaration d'un tableau avec une variable non
constante est-elle autorisée en C++ ? n'est-ce pas un peu dangereux si
par exemple ma variable est mal "controlée" (ex : x=29299939391992991)
depuis quand la déclaration d'un tableau avec une variable non constante est-elle autorisée en C++ ?
C'est sûrement une extension de ton compilateur car ça ne semble pas être autorisé par la norme. Avec g++, en mode ANSI strict :
[ tmp]$ cat tab.cpp int main() { int x = 25; int tab[x]; } [ tmp]$ g++ -ansi -Wall -pedantic -o tab tab.cpp tab.cpp: In function `int main()': tab.cpp:4: warning: ISO C++ forbids variable-size array `tab'
Par contre, ça passe si on enlève les flags "-ansi ...".
n'est-ce pas un peu dangereux si par exemple ma variable est mal "controlée" (ex : x)299939391992991)
Pas plus que :
int x = 2909879789789; // [...] int* monTab = new int[x];
ou bien :
int* b = 0; // ... *b = 1234;
etc...
En principe, ta variable ne devrait pas être "mal contrôlée". Ou bien je ne comprends pas ce que tu entends par cette expression...
Un des avantages de C++, c'est quand même de nous laisser libre de faire ce qu'on veut, même si c'est "dangereux". Au programmeur de faire attention, et d'ajouter lui-même les tests s'il le veut. De cette façon, les personnes qui n'ont pas besoin de ces tests ne sont pas pénalisées (notamment au niveau des performances).
Vincent
-- vmime, une bibliothèque C++ sous licence GPL pour parser et générer des messages au format MIME : http://www.sourceforge.net/projects/vmime/
int x;
cin>>x;
int tab[x];
[...]
depuis quand la déclaration d'un tableau avec une variable non
constante est-elle autorisée en C++ ?
C'est sûrement une extension de ton compilateur car ça ne semble pas être
autorisé par la norme. Avec g++, en mode ANSI strict :
[vincent@Sherlock tmp]$ cat tab.cpp
int main()
{
int x = 25;
int tab[x];
}
[vincent@Sherlock tmp]$ g++ -ansi -Wall -pedantic -o tab tab.cpp
tab.cpp: In function `int main()':
tab.cpp:4: warning: ISO C++ forbids variable-size array `tab'
Par contre, ça passe si on enlève les flags "-ansi ...".
n'est-ce pas un peu dangereux si par exemple ma variable est mal
"controlée" (ex : x)299939391992991)
Pas plus que :
int x = 2909879789789;
// [...]
int* monTab = new int[x];
ou bien :
int* b = 0;
// ...
*b = 1234;
etc...
En principe, ta variable ne devrait pas être "mal contrôlée". Ou bien je ne
comprends pas ce que tu entends par cette expression...
Un des avantages de C++, c'est quand même de nous laisser libre de faire ce
qu'on veut, même si c'est "dangereux". Au programmeur de faire attention, et
d'ajouter lui-même les tests s'il le veut. De cette façon, les personnes qui
n'ont pas besoin de ces tests ne sont pas pénalisées (notamment au niveau
des performances).
Vincent
--
vmime, une bibliothèque C++ sous licence GPL pour parser et générer
des messages au format MIME : http://www.sourceforge.net/projects/vmime/
depuis quand la déclaration d'un tableau avec une variable non constante est-elle autorisée en C++ ?
C'est sûrement une extension de ton compilateur car ça ne semble pas être autorisé par la norme. Avec g++, en mode ANSI strict :
[ tmp]$ cat tab.cpp int main() { int x = 25; int tab[x]; } [ tmp]$ g++ -ansi -Wall -pedantic -o tab tab.cpp tab.cpp: In function `int main()': tab.cpp:4: warning: ISO C++ forbids variable-size array `tab'
Par contre, ça passe si on enlève les flags "-ansi ...".
n'est-ce pas un peu dangereux si par exemple ma variable est mal "controlée" (ex : x)299939391992991)
Pas plus que :
int x = 2909879789789; // [...] int* monTab = new int[x];
ou bien :
int* b = 0; // ... *b = 1234;
etc...
En principe, ta variable ne devrait pas être "mal contrôlée". Ou bien je ne comprends pas ce que tu entends par cette expression...
Un des avantages de C++, c'est quand même de nous laisser libre de faire ce qu'on veut, même si c'est "dangereux". Au programmeur de faire attention, et d'ajouter lui-même les tests s'il le veut. De cette façon, les personnes qui n'ont pas besoin de ces tests ne sont pas pénalisées (notamment au niveau des performances).
Vincent
-- vmime, une bibliothèque C++ sous licence GPL pour parser et générer des messages au format MIME : http://www.sourceforge.net/projects/vmime/
Fabien LE LEZ
On Mon, 17 Nov 2003 22:23:04 +0100, Nicolas Aunai ç wrote:
ayant a l'origine appris le C, j'apprend a présent le C++, et j'ai été un peu "choqué" de voir que je pouvais faire une déclaration de tableau ainsi :
int x; cin>>x; int tab[x];
Ce n'est pas autorisé en C++ ; par contre il me semble que c'est autorisé en C (sauf le 'cin' bien sûr).
On peut par contre écrire :
int x; cin>>x; std::vector<int> tab (x);
n'est-ce pas un peu dangereux si par exemple ma variable est mal "controlée" (ex : x)299939391992991)
Y'a plein de trucs dangereux à faire en C++. Le C++ est un langage pour "adultes" (pas de notion d'âge ici) : t'as le droit de faire à peu près tout ce que tu veux, à toi de prendre tes responsabilités et de faire un peu attention à ce que tu fais.
Au fait, tu travailles sur une machine 64 bits ?
-- ;-)
On Mon, 17 Nov 2003 22:23:04 +0100, Nicolas Aunai
<nicolas.aunai@virerça@free.fr> wrote:
ayant a l'origine appris le C, j'apprend a présent le C++, et j'ai été
un peu "choqué" de voir que je pouvais faire une déclaration de tableau
ainsi :
int x;
cin>>x;
int tab[x];
Ce n'est pas autorisé en C++ ; par contre il me semble que c'est
autorisé en C (sauf le 'cin' bien sûr).
On peut par contre écrire :
int x;
cin>>x;
std::vector<int> tab (x);
n'est-ce pas un peu dangereux si
par exemple ma variable est mal "controlée" (ex : x)299939391992991)
Y'a plein de trucs dangereux à faire en C++.
Le C++ est un langage pour "adultes" (pas de notion d'âge ici) : t'as
le droit de faire à peu près tout ce que tu veux, à toi de prendre tes
responsabilités et de faire un peu attention à ce que tu fais.
On Mon, 17 Nov 2003 22:23:04 +0100, Nicolas Aunai ç wrote:
ayant a l'origine appris le C, j'apprend a présent le C++, et j'ai été un peu "choqué" de voir que je pouvais faire une déclaration de tableau ainsi :
int x; cin>>x; int tab[x];
Ce n'est pas autorisé en C++ ; par contre il me semble que c'est autorisé en C (sauf le 'cin' bien sûr).
On peut par contre écrire :
int x; cin>>x; std::vector<int> tab (x);
n'est-ce pas un peu dangereux si par exemple ma variable est mal "controlée" (ex : x)299939391992991)
Y'a plein de trucs dangereux à faire en C++. Le C++ est un langage pour "adultes" (pas de notion d'âge ici) : t'as le droit de faire à peu près tout ce que tu veux, à toi de prendre tes responsabilités et de faire un peu attention à ce que tu fais.
Au fait, tu travailles sur une machine 64 bits ?
-- ;-)
Marc Boyer
icolas Aunai wrote:
ayant a l'origine appris le C, j'apprend a présent le C++, et j'ai été un peu "choqué" de voir que je pouvais faire une déclaration de tableau ainsi :
int x; cin>>x; int tab[x];
C'est a ma connaissance une extension GNU (mais peut-être d'autres compilateurs l'implémentent-ils aussi).
je pensais, qu'il n'y avait que 4 méthodes pour déclarer un tableau :
#define MAX 20 int tab[MAX];
ou bien
int tab[20]
Notons que ces deux premières versions sont équivalentes pour le compilateur (après passage du préprocesseur, int tab[MAX] devient littéralement int tab[20]).
const int x = 20; int tab[x];
On peut aussi faire en C99 void foo(int x){ int tab[x]; }
mais c'est interdit en C++
Marc Boyer -- Lying for having sex or lying for making war? Trust US presidents :-(
icolas Aunai wrote:
ayant a l'origine appris le C, j'apprend a présent le C++, et j'ai été
un peu "choqué" de voir que je pouvais faire une déclaration de tableau
ainsi :
int x;
cin>>x;
int tab[x];
C'est a ma connaissance une extension GNU (mais peut-être
d'autres compilateurs l'implémentent-ils aussi).
je pensais, qu'il n'y avait que 4 méthodes pour déclarer un tableau :
#define MAX 20
int tab[MAX];
ou bien
int tab[20]
Notons que ces deux premières versions sont équivalentes pour
le compilateur (après passage du préprocesseur, int tab[MAX]
devient littéralement int tab[20]).
const int x = 20;
int tab[x];
On peut aussi faire en C99
void foo(int x){
int tab[x];
}
mais c'est interdit en C++
Marc Boyer
--
Lying for having sex or lying for making war? Trust US presidents :-(
ayant a l'origine appris le C, j'apprend a présent le C++, et j'ai été un peu "choqué" de voir que je pouvais faire une déclaration de tableau ainsi :
int x; cin>>x; int tab[x];
C'est a ma connaissance une extension GNU (mais peut-être d'autres compilateurs l'implémentent-ils aussi).
je pensais, qu'il n'y avait que 4 méthodes pour déclarer un tableau :
#define MAX 20 int tab[MAX];
ou bien
int tab[20]
Notons que ces deux premières versions sont équivalentes pour le compilateur (après passage du préprocesseur, int tab[MAX] devient littéralement int tab[20]).
const int x = 20; int tab[x];
On peut aussi faire en C99 void foo(int x){ int tab[x]; }
mais c'est interdit en C++
Marc Boyer -- Lying for having sex or lying for making war? Trust US presidents :-(
Nicolas Aunai
"Vincent Richard" a couché sur son écran :
En principe, ta variable ne devrait pas être "mal contrôlée". Ou bien je ne comprends pas ce que tu entends par cette expression...
et bien par exemple, si on admet que le programmeur a pris TOUTES les sécurités possibles et imaginables pour controler les valeurs prises par x, il y a certains cas, par exemple dans des applications réseau, où x pourrait prendres des valeurs farfelues et imprévisibles venues de l'extérieur du programme... dans ces conditions, déclarer un tableau de dimension x, inconnue donc, me parait assez dangereux.
En principe, ta variable ne devrait pas être "mal contrôlée". Ou bien je ne
comprends pas ce que tu entends par cette expression...
et bien par exemple, si on admet que le programmeur a pris TOUTES les
sécurités possibles et imaginables pour controler les valeurs prises
par x, il y a certains cas, par exemple dans des applications réseau,
où x pourrait prendres des valeurs farfelues et imprévisibles venues de
l'extérieur du programme... dans ces conditions, déclarer un tableau de
dimension x, inconnue donc, me parait assez dangereux.
En principe, ta variable ne devrait pas être "mal contrôlée". Ou bien je ne comprends pas ce que tu entends par cette expression...
et bien par exemple, si on admet que le programmeur a pris TOUTES les sécurités possibles et imaginables pour controler les valeurs prises par x, il y a certains cas, par exemple dans des applications réseau, où x pourrait prendres des valeurs farfelues et imprévisibles venues de l'extérieur du programme... dans ces conditions, déclarer un tableau de dimension x, inconnue donc, me parait assez dangereux.
je n'arrive pas a trouver le passage le disant dans la norme
Comme je n'ai pas la norme, je ne te donnerais pas plus d'info sur le sujet mais 1) mon compilateur g++ a la gentillesse de me le signaler (et je lui fais assez confiance sur ce coup là) 2) je crois tenir l'information de Gabriel, qui m'avait repris sur le sujet
Marc Boyer -- Lying for having sex or lying for making war? Trust US presidents :-(
Nicolas Aunai wrote:
"Marc Boyer" a dit:
mais c'est interdit en C++
je n'arrive pas a trouver le passage le disant dans la norme
Comme je n'ai pas la norme, je ne te donnerais pas plus
d'info sur le sujet mais
1) mon compilateur g++ a la gentillesse de me le signaler
(et je lui fais assez confiance sur ce coup là)
2) je crois tenir l'information de Gabriel, qui m'avait
repris sur le sujet
Marc Boyer
--
Lying for having sex or lying for making war? Trust US presidents :-(
je n'arrive pas a trouver le passage le disant dans la norme
Comme je n'ai pas la norme, je ne te donnerais pas plus d'info sur le sujet mais 1) mon compilateur g++ a la gentillesse de me le signaler (et je lui fais assez confiance sur ce coup là) 2) je crois tenir l'information de Gabriel, qui m'avait repris sur le sujet
Marc Boyer -- Lying for having sex or lying for making war? Trust US presidents :-(
Jean-Marc Bourguet
Nicolas Aunai ç writes:
"Marc Boyer" a dit:
mais c'est interdit en C++
je n'arrive pas a trouver le passage le disant dans la norme
5.19
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
Nicolas Aunai <nicolas.aunai@virerça@free.fr> writes:
"Marc Boyer" a dit:
mais c'est interdit en C++
je n'arrive pas a trouver le passage le disant dans la norme
5.19
A+
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
je n'arrive pas a trouver le passage le disant dans la norme
5.19
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
je n'arrive pas a trouver le passage le disant dans la norme
5.19
Mais surtout §8.3.4.
-- James Kanze GABI Software mailto: Conseils en informatique orientée objet/ http://www.gabi-soft.fr Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
Jean-Marc Bourguet <jm@bourguet.org> wrote in message
news:<pxby8ueynwg.fsf@news.bourguet.org>...
Nicolas Aunai <nicolas.aunai@virerça@free.fr> writes:
"Marc Boyer" a dit:
mais c'est interdit en C++
je n'arrive pas a trouver le passage le disant dans la norme
5.19
Mais surtout §8.3.4.
--
James Kanze GABI Software mailto:kanze@gabi-soft.fr
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
je n'arrive pas a trouver le passage le disant dans la norme
5.19
Mais surtout §8.3.4.
-- James Kanze GABI Software mailto: Conseils en informatique orientée objet/ http://www.gabi-soft.fr Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16