Bonjour!

Voici une affirmation que je trouve pour la 3eme fois (un prof et 2 bouquins différents) et pourtant le test me prouve le contraire.

"Cette instruction:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
#define N 50
...
int t[N];
float h [2*N-1];

est correcte. En revanche, elle ne le serait pas (en C) si N était une constante symbolique définie par const int N=50, les expressions N et 2N-1 n'étant alors plus calculables par le compilateur (elle sera cependant acceptée en C++)."


J'ai testé sous Code::Blocks et Dev-C++ et les 2 cas fonctionnent! Pourquoi?
Mon prof me dit que les parametres des compilateurs prennent en compte des versions de C améliorées par rapport au C initial.

Mais si c'est le cas, j'imagine qu'on doit pouvoir paramétrer le compilateur sur une version du C, nan? ça se choisirait où?

Pourquoi les deux écritures fonctionnent?

Merci!

Blutch

P.S.: et voici un petit code pour que vous testiez

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
main()
{
const int N=4;
int i[N], n;
 
//initialisation des valeurs des cellules du tableau
for (n=0; n<4; n++)
    {
    i[n]=0;
    }
 
//attribution de valeurs aux cellues du tableau
for (n=1; n<4; n++)
    {
    i[n]=i[n-1]+1;
    printf("cellule numero %d",n);
    printf("\tvaleur=%d\n",i[n]);
    }
}