Question

J'utilise C ++ depuis quelques années, et aujourd'hui, je voyais un peu de code, mais comment peut-il être parfaitement légal?

int main(int argc, char **argv)
{
    size_t size;
    cin >> size;
    int array[size];
    for(size_t i = 0; i < size; i++)
    {
        array[i] = i;
        cout << i << endl;
    }

    return 0;
}

Compilé sous GCC.

Comment la taille peut être déterminée à l'exécution sans new ou malloc?

Il suffit de vérifier, j'ai googlé certains et tous les codes semblables à la mienne sont réclamés pour donner une erreur de taille de stockage.

Même de Deitel C ++ Comment programmer p. 261 états sous erreur de programmation commune 4.5:

  

Seules les constantes peuvent être utilisées pour déclarer la taille des tableaux automatiques et statiques.

Enlight moi.

Était-ce utile?

La solution

Ceci est valable dans C99.

C99 norme prend en charge des réseaux de taille variable sur la pile. Probablement votre compilateur a choisi de soutenir cette construction aussi.

Notez que ceci est différent de malloc et new. gcc attribue le tableau sur la pile, comme il le fait avec int array[100] simplement en ajustant le pointeur de la pile. Aucune allocation de tas est fait. Il est à peu près comme _alloca .

Autres conseils

Ceci est connu comme VLA (Les tableaux de longueur variable). Il est standard dans C99, mais gcc permet en c ++ code comme une extension. Si vous voulez rejeter le code, essayez d'expérimenter avec des options -std=standard, -ansi et -pedantic.

Il est valide que dans C99. La prochaine fois que vous pouvez essayer de vérifier votre code dans un compilateur fiable .

Il est valable C99, il n'est pas valide C ++. Ceci est l'un des pas quelques différences entre les deux langues.

Vous pouvez donner la taille d'un tableau dynamique si vous utilisez le compilateur Dev-Cpp Je l'ai essayé et a obtenu aucune erreur mais c ++ visuelle et compilateurs studio visuels, il est impossible. Je pense que la raison en est que c ++-dev attribue un nombre positif à l'int uninitialized et quand on lui donne un numéro, il est remplacé par celui donné. mais peut-être d'autres compilateurs donnent nulle à des variables non initialisées.

Ce code fonctionne dans GNU compilateur GCC.

#include<bits/stdc++.h>

int main(int argc, char **argv)

{
    size_t size;

   std:: cin >> size;

    int array[size];

    for(size_t i = 0; i < size; i++)

{

array[i] = i;

        std:: cout << i;

 }

    return 0;
}

Tableaux de longueur variable (VLA) sont pris en charge dans la norme C ++ 14, qui a récemment été acceptée et est en attente de publication.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top