[Aide SDK] Les erreurs de compilation
Posté le 15/05/2011 00:10
Suite aux nombreuses demande d'aide que je reçois concernant des messages d'erreur lors de compilation avec le SDK, je décide de créer ce topic qui aura pour but de recenser tous les messages d'erreur, de les expliquer, et de donner leur solution.
Premièrement, qu'est ce qu'une erreur de compilation ?
Ici, ce sont les 4 lignes qui commencent par le chemin de mon fichier source contenant les erreurs (Z:\home\pierre\a\a.c) suivi du numéro de la ligne contenant l'erreur.
Liste des erreurs
Illegal token ''<mot>''
Description : Une erreur de syntaxe a été rencontrée
avant <mot> (un point virgule manquant, une parenthèse en trop ...)
Solution : Arrêter de coder avec les pieds.
Undeclared name ''<nom>''
Description : Une variable est utilisée sans avoir été déclarée au préalable.
Solution : Déclarer la variable au début de la fonction.
Cannot convert parameter ''X''
Description : Le paramètre n°X envoyé à la fonction n'est pas du bon type, et ne peut pas être converti.
Solution : Vérifier quel type de variable demande la fonction, et lui envoyer une variable du bon type.
Illegal initializer type
Description : Une variable est initialisée avec un type incorrecte (exemple, un entier initialisé avec une chaîne de caractère)
Solution : Initialiser la variable avec une valeur CONSTANTE correcte.
Le compilateur Renesas utilisé par le SDK respecte la norme C89, qui spécifie qu'une variable doit être initialisée avec une valeur constante, et non une valeur de retour de fonction, ou un paramètre de la fonction.
Multiple variable declarations
Description : Une variable a déjà le même nom et la même portée que celle déclarée à la ligne de l'erreur.
(Deux variables peuvent avoir le même nom si elles n'ont pas la même portée)
Solution : Nommer la variable différemment.
Type not compatible for ''=''
Description : L'affectation d'une valeur à une variable a échouée car la valeur n'est pas d'un type compatible avec celui de la variable.
Solution : Si la valeur affectée est un retour de fonction, vérifier quel type de variable retourne la fonction.
Modifiable lvalue required for ''=''
Description : Un élément non modifiable (comme une fonction où une constante) est suivi d'un signe égal.
Solution : Seule les variables peuvent se voir affecter une valeur avec ''=''.
Index not integer
Description : utilisation d'un float ou d'un double dans l'index d'une case de tableau.
Solution : Caster en int, tableau[double] devient tableau[(int)double]
Number of parameters mismatch
Description : Trop ou pas assez de paramètres sont envoyés à la fonction.
Solution : Regarder ce que demande la fonction, et le respecter.
Undefined external symbol ''_<nom de fonction>''
Description : Une fonction est appelée, mais son implémentation n'a pas été compilée.
Solution : Vérifier l'orthographe du nom, vérifier si le fichier contenant la fonction est bien dans la fenêtre ''Files in project''. Si tout ça est bon, essayez d'éditer le fichier contenant l'implémentation de la fonction (ajouter un espace, le supprimer, sauvegarder), ça permettra au compilateur de re-compiler le fichier.
couldn't open ''<nom de fichier>''
Description : Un fichier inclu avec #include n'existe pas.
Solution : Lors de l'inclusion d'un fichier, il faut donner son
chemin relatif depuis le fichier contenant la directive #include
Empty source program
Description : Le fichier source est vide, et aucun compilateur n'aime ça.
Cannot open source file ''<nom de fichier>''
Description : Le fichier source présent dans la fenêtre ''Files in project'' du SDK n'existe pas.
Unrecognized preprocessing directive
Description : Une directive de préprocesseur (lignes commençant pas #) n'est pas correctement orthographiée.
Illegal preprocessor syntax
Description : Erreur de syntaxe dans une directive de préprocesseur.
Expected a file name
Description : Un nom de fichier est attendu (généralement une erreur de syntaxe dans une directive include)
Expected an identifier
Description : Un identifiant est attendu (généralement une erreur de syntaxe dans une directive define ou ifdef)
Invalid parameter specified in option "input" : ""C:\Program Files (x86)\CASIO\fx-9860G SDK\OS\FX\lib\setup.obj""
Description : Ne jamais installer le SDK dans un dossier dont le chemin comporte des parenthèses ! Mettez-le dans C:\Programmes\CASIO par exemple.
Cette liste est incomplète, si vous rencontrez d'autres erreurs, vous pouvez les poster ici, elles seront ajoutées.
Voici une liste en anglais de toutes les erreurs possibles et imaginables. Cela ne vous donne pas forcément une bonne solution, mais ça peut vous aiguiller sur une piste
Dernière modification : 26/09/2013 (Dark Storm)
Fichier joint
Citer : Posté le 29/05/2012 08:05 | #
C'est du C orienté objet ? GG, moi dans ce cas j'utilise le C++ (enfin mon projet angry birds en C++ n'utilise même pas l'OO mais c'est pour d'autrs raisons).
Citer : Posté le 29/05/2012 09:20 | #
C'est une structure, rien à voir avec la philosophie de l'objet.
Citer : Posté le 29/05/2012 13:41 | #
Bah oui, c'est qu'une structure
Citer : Posté le 29/05/2012 22:43 | #
Je vais essayer de le compiler dans un autre fichier
My program is not working, I have no idea why.
My program is working, I have no idea why.
Citer : Posté le 24/07/2012 12:26 | #
C1016 (W) Argument mismatch
cette erreur est due à quoi ? elle me pourri la vie j'l'ai tout le temps ><
Citer : Posté le 24/07/2012 13:29 | #
Oui, c'est vrai, je l'ai eu plusieurs fois, mais il n'apparait pas dans la liste
My program is not working, I have no idea why.
My program is working, I have no idea why.
Citer : Posté le 24/07/2012 14:56 | #
C'est un warning, pas une erreur (d'où le W). Ça ne bloque pas la compilation, mais le compilateur averti tout de même d'une possible erreur. Ici, une erreur de type d'un argument passé à une fonction.
Exemple, la fonction Print demande un unsigned char*, si tu lui envoies un char* t'auras ce warning, mais aucun soucis.
Citer : Posté le 24/07/2012 15:37 | #
ok merci
Citer : Posté le 15/08/2012 21:24 | #
j'ai un 'blem, sa vient pas de la compil, mais sa apparaît en cours de programme:
Ajouté le 15/08/2012 à 21:26 :
Si vous pouviez m’expliquer d\'où sa vient, je vous en saurais gré car j\'aimerais pouvoir avancer dans la programmation de mon minecraft le plus vite possible.
-en C:
-Un pong.
-Un projet en pause. Je compte le reprendre de temps en temps: Summer Cursed
-mon tuto sur les Str
Mes calto: G25+, G75
Mon minecraft en dévelopement
-Portal2D de JavierXD
-CalCraft de Wime
-GeekBros du groupe GeekBrothers (Eiyeron,Siapran,KevKevVTT,Adbook,LIMachi)
Citer : Posté le 15/08/2012 21:34 | #
Ton programme a essayé d'accéder à l'adresse mémoire 0x8808000C qui n'existe pas System Error
Sûrement un buffer overflow ou une mauvaise manipulation de pointeur.
Commence par trouver la ligne où survient l'erreur (en ajoutant des infos de debug dans le code ou en utilisant le debugger) puis vérifie toutes les manipulations faites sur le pointeur qui pose problème.
Citer : Posté le 15/08/2012 21:40 | #
cette erreur n'est pas détectée lors de la compilation, et je ne sais pas comment la trouver dans mon code sans aide. n'utilisant quasiment jamais de pointeurs, je vais tenter de modifier mon code a chaque endroit ou un pointeur pourrait-être mal utilisé.
Qu'est-ce que le debbuger? c'est le build result?
Ajouté le 15/08/2012 à 21:49 :
en testant le code en mode ligne par ligne, je tombe sur une boucle for(x=1;x<TAILLE_TEXTURE;x++)
je vérifie la variable x et je tombe sur x=-2013118444, ce qui m\'a surpris
-en C:
-Un pong.
-Un projet en pause. Je compte le reprendre de temps en temps: Summer Cursed
-mon tuto sur les Str
Mes calto: G25+, G75
Mon minecraft en dévelopement
-Portal2D de JavierXD
-CalCraft de Wime
-GeekBros du groupe GeekBrothers (Eiyeron,Siapran,KevKevVTT,Adbook,LIMachi)
Citer : Posté le 15/08/2012 21:51 | #
Tu vois le bouton play pour démarrer l'émulation ? T'as plein de boutons à coté pour manipuler l'exécution. Tout ça est expliqué dans le manuel du SDK (FXSHc.chm dans le répertoire d'installation)
Mais tu peux faire à l'ancienne, tu te crées une fonction pause qui dit "jusqu'ici tout va bien", et tu l'appelles juste après l'initialisation du prog. Si ça s'affiche, c'est que le problème n'est pas dans l'initialisation, et tu fais des recherches comme ça.
Citer : Posté le 15/08/2012 21:58 | #
j'ai beau initialiser x de toutes les manières possible, il prend toujours la valeurs -2013118444
-en C:
-Un pong.
-Un projet en pause. Je compte le reprendre de temps en temps: Summer Cursed
-mon tuto sur les Str
Mes calto: G25+, G75
Mon minecraft en dévelopement
-Portal2D de JavierXD
-CalCraft de Wime
-GeekBros du groupe GeekBrothers (Eiyeron,Siapran,KevKevVTT,Adbook,LIMachi)
Citer : Posté le 15/08/2012 22:15 | #
Regarde sa valeur avant qiu'il nesoit utilisé
Citer : Posté le 15/08/2012 22:20 | #
le problème, c'est qu'il est déclaré directement dans la fonction, il ne devrait pas être déjà utilisé.
Je vais quand même vérifier.
Ajouté le 15/08/2012 à 22:22 :
alors qu\'au début de la fonction, je l\'initialise a 0, juste avant le for, il vaut -2013118848, je vais donc re-tester la fonction en vérifiant les valeurs de x
-en C:
-Un pong.
-Un projet en pause. Je compte le reprendre de temps en temps: Summer Cursed
-mon tuto sur les Str
Mes calto: G25+, G75
Mon minecraft en dévelopement
-Portal2D de JavierXD
-CalCraft de Wime
-GeekBros du groupe GeekBrothers (Eiyeron,Siapran,KevKevVTT,Adbook,LIMachi)
Citer : Posté le 15/08/2012 22:33 | #
Aaargh, le programme n'initialise la variable tant qu'elle ne va pas directement l'utiliser
Citer : Posté le 15/08/2012 22:41 | #
petit bug étrange, après avoir rajouté des commentaires pour me retrouver dans mes fonctions, voila que ce n'est plus une fenetre de windows qui souvre, mais une pop-up sur l'écran de la calto :
-en C:
-Un pong.
-Un projet en pause. Je compte le reprendre de temps en temps: Summer Cursed
-mon tuto sur les Str
Mes calto: G25+, G75
Mon minecraft en dévelopement
-Portal2D de JavierXD
-CalCraft de Wime
-GeekBros du groupe GeekBrothers (Eiyeron,Siapran,KevKevVTT,Adbook,LIMachi)
Citer : Posté le 15/08/2012 22:52 | #
C'est un system error, sauf qu'ils ont oublié de foutre une popup pour celui-là
Je suis persuadé que cet émulateur est un fragment de celui du FX-Manager, ils ont pas fait le boulot 2 fois.
Citer : Posté le 15/08/2012 23:09 | #
Segfault error
Citer : Posté le 15/08/2012 23:09 | #
je connais pas FX-Manager
-en C:
-Un pong.
-Un projet en pause. Je compte le reprendre de temps en temps: Summer Cursed
-mon tuto sur les Str
Mes calto: G25+, G75
Mon minecraft en dévelopement
-Portal2D de JavierXD
-CalCraft de Wime
-GeekBros du groupe GeekBrothers (Eiyeron,Siapran,KevKevVTT,Adbook,LIMachi)
Citer : Posté le 16/08/2012 08:01 | #
Je vois qu'il y a des interrogations quant aux valeurs affichées dans les fenêtres "Local variables" et "Global variables". Il faut savoir qu'une variable C va souvent être stockée dans un simple registre dans le code compilé, et que ce registre peut être utilisé pour différentes choses, même au sein d'une même fonction. Donc les valeurs affichées dans ces fenêtres sont fiables surtout pour les données stockées en RAM (tableaux, structures ...) et pour les simple variables il ne faut pas les prendre au pied de la lettre, ce n'est valable que dans le bout de code qui utilise la variable.
Dans ton cas précis Limachi, tu initialises une variable à 0 au début de la fonction, puis l'initialise à 1 au début de la boucle. Tu crois que le compilateur va stocker 0 dans un registre et s'interdire de l'utiliser jusqu'au début de la boucle juste pour te faire plaisir ? Non, il optimise. Si la variable ne sert que dans la boucle, alors le registre qu'il va utiliser comme compteur peut être utilisé pour autre chose avant et après. Quand t'as que 16 registres dispo, tu ne les gaspilles pas.