Je ne savais pas que l'écriture int tab[a]; s'appelait un tableau dynamique. Je trouve ce terme un peu bâtard quand même. Ce n'est effectivement pas autorisé en C89/90, comme je l'ai précisé dans mon code exemple. Mais c'est uniquement ça qui n'est pas autorisé, la boucle elle est tout à fait valable !
En C89, tu devais donc passer par une allocation dynamique avec malloc / free pour créer un tableau dont la taille n'est pas connue à la compilation. En C99, tu peux passer par une allocation statique bien qu'avec une taille variable (je crois manquer un peu de rigueur sur ces termes...). Ca allège le code pour des variables locales à une fonction et limite les risques de fuite mémoire en oubliant les free (pas bien !).
gcc supporte C99 depuis des années. Je pense d'ailleurs que le support de C11 ne devrait pas tarder. L'option est effectivement -std=c99, bien que sans cette option, il fait une compilation où il ne met que des warning et non des erreurs sur les écritures interdites en C89/90 mais valables en C99.
Ok, donc je ne me focalise pas sur le C89, je peux me laisser tenter par le c99.
C'est mon avis. Mince, le C99 a quand même 13 ans, il serait temps de l'utiliser.
Vous avez quelques liens à me fournir pour me documenter sur les différences notables.
Euh.... Attend je vais me renseigner sur Wikipedia, je ne suis pas capable de te les citer ! http://en.wikipedia.org/wiki/C99#Design
En vrac si tu ne parles pas anglais :
- les commentaires avec // ... et non /* ... */
- les tableaux à taille variable (je trouve ce terme mieux adapté que tableau dynamique en fait)
- les fonctions inline
- un type booléen
- snprintf !
- un type complexe
- des macros a nombre variables d'arguments

- la possibilité de mixer déclarations et codes "réel" dans une fonction (en C89, toutes les déclarations doivent être au début)
Je vais rajouter deux trucs pour me faire de la pub :
Partager