Problème avec la taille d'un tableau [résolu] - C - Programmation
Marsh Posté le 08-12-2004 à 00:38:10
"const" ne signifie pas "constante" mais "ne peut être réaffecter par la suite". Un tableau étant constuit par un type et une expression constante, ton compilateur a donc raison
Marsh Posté le 08-12-2004 à 14:44:42
Taz a écrit : "const" ne signifie pas "constante" mais "ne peut être réaffecter par la suite". Un tableau étant constuit par un type et une expression constante, ton compilateur a donc raison |
rien a voir, mais la au taf on a un gcc 2.96 (on fait du c90). Si on update y'a risque de pb d'apres toi ? (truc qui compile pu, ce genre de gag)
Marsh Posté le 08-12-2004 à 15:10:15
si tu veut définir une vraie constante fait une macro
#define POUET 100
et tout sera remplacé par le préprocesseur
Marsh Posté le 08-12-2004 à 15:22:04
Ouais, enfin y a plus simple, hein.
const char * tab = "programmation";
const char tab[] = "programmation";
Ou même si ça t'amuse (en C99 uniquement, avec les VLA):
char tab[taille];
strncpy(tab, "programmation", sizeof (tab));
Marsh Posté le 08-12-2004 à 16:32:45
push a écrit : Lam's> pq en C99 uniquement ? |
Si taille n'est pas une constante, alors la taille du tableau n'est pas connue à la compilation, et le C90 (le C Ansi) ne l'accepte pas.
Par contre, le C99 autorise la création de Variable-Length Arrays, dont la taille n'est connue qu'à l'exécution. Dans mon pseudo-bout de code, taille était une variable.
Marsh Posté le 08-12-2004 à 16:42:08
chrisbk a écrit : rien a voir, mais la au taf on a un gcc 2.96 (on fait du c90). Si on update y'a risque de pb d'apres toi ? (truc qui compile pu, ce genre de gag) |
non, je pense pas. Mais tu devrais d'abord t'assurer que ton fonctionne bien avec quelque chose genre -std=gnu89 .
Après si c'est propre, ça devrait très bien passé. Les seuls trucs qui vont chier, c'est les trucs de type-punning sur les pointeurs et les cast de l-values, mais normalement, dans du code propre, on en trouve pas.
Marsh Posté le 08-12-2004 à 19:34:38
Taz a écrit : "const" ne signifie pas "constante" mais "ne peut être réaffecter par la suite". Un tableau étant constuit par un type et une expression constante, ton compilateur a donc raison |
Mais je n'ai pas mis la faute une seule seconde sur le copilateur.
Merci pour vos réponses
Marsh Posté le 08-12-2004 à 21:16:57
Evolvox a écrit : D'après ce que j'ai compris, un tableau doit avoir une taille bien définie si on veut pouvoir espérer le compiler (j'ai entendu parler d'allocations dynmaiques et autre joyeusetés, mais j'en suis pas encore là). Donc au début de mon code (après les includes) j'ai :
|
C'est normal. En C90 (le C le plus en vogue), l'expression qui est entre les crochets doit être une 'expression constante', c'est à dire une valeur numérique valide, une macro représentant une valeur numérique valide ou un enum. Le code que tu proposes est appelé 'VLA' (Variable Length Array) et n'est disponible (en théorie) que sur les compilateur à la norme C99. (rare, mais c'est le cas de gcc 3.x si on utilise les bons flags)
Citation :
|
C'est normal, '100' est une 'expression constante', et ton compilateur (probabement C90) avale ça sans problèmes.
Marsh Posté le 08-12-2004 à 23:06:43
N'empeche qu'avec un const int dont la valeur est definie a la declaration, le compilo a toutes les infos dont il a besoin pour reserver le tableau. Il n'y a pas de raison technique qui l'empeche de le faire.
Marsh Posté le 08-12-2004 à 23:09:24
matafan a écrit : N'empeche qu'avec un const int dont la valeur est definie a la declaration, le compilo a toutes les infos dont il a besoin pour reserver le tableau. Il n'y a pas de raison technique qui l'empeche de le faire. |
Oui, c'est une extension connue de gcc...
Marsh Posté le 07-12-2004 à 23:06:34
Hello tout le monde !
D'après ce que j'ai compris, un tableau doit avoir une taille bien définie si on veut pouvoir espérer le compiler (j'ai entendu parler d'allocations dynmaiques et autre joyeusetés, mais j'en suis pas encore là). Donc au début de mon code (après les includes) j'ai :
puis dans ma main je déclare une chaîne :
Malheureusement quand je tente de compiler j'ai ceci :
variable-sized object may not be initialized
mais si je fais
Pas de problèmes à la compile ! Je pige pas trop... merci de votre aide !
Message édité par Evolvox le 08-12-2004 à 19:35:03
---------------
gaymer's est la personne la plus formidable jamais rencontrée dans toute ma vie, je lui achèterais un makato et au moins les 4 news pourries quotidiennes qui vont avec