Bonjour, je ne comprend pas trop pourquoi le code suivant marche :
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
 
#include <iostream>
 
using namespace std;
 
int main()
{
    int n = 15;
    char tab[n]; // ??? Allocation implicite ???
 
    cout << sizeof(tab) << endl;
 
    cout << "Hello world!" << endl;
    return 0;
}
Cela compile sans soucis avec gcc, la valeur renvoyée par le sizeof est 15 et on peut accéder aux éléments du tableau.

Je pensais que l'allocation dynamique devait se faire via un new (et delete) et donc que le compilateur aurait planté (au moins fait un warning), mais ce n'est pas le cas (il n’interprète pas n comme étant une constante la lecture d'un nombre via la console donne le même résultat). De même je pensais que sizeof était un élément remplacé à la compilation... or il semblerait que ce soit une évaluation dynamique qui soit faite.

Quelqu'un a-t-il des informations à ce sujet ? ce genre de syntaxe est-elle portable ? A quel comportement doit-on s'attendre de la part de ce programme ?