[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 06/10/2012 22:23 | #
difficile de réduire un code, sans squeezer des truc importants
je vais donc devoir le reprogrammer pour la 19ème fois...
-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 13/10/2012 08:45 | #
squeezer
On dit "esquisser" !
Vitesse des fonctions en Basic Casio | 7 days CPC | Casio Universal Wiki | Tutoriel Basic Casio
>>> Give me a click Brother <<< >>> Teste mon générateur de mots nouveaux <<<
>>> Random Youtube Video <<<
Citer : Posté le 20/10/2012 23:06 | #
au secours, j'ai encore un bug dans mon con de programme de minecraft!
Ajouté le 20/10/2012 à 23:08 :
au fait totoyo, j\'ai dit squeezer dans le sens retirer( ou sauter), c\'est une expression qui assez utilisée (ce prononce squouizer).
Ajouté le 20/10/2012 à 23:12 :
il y a une définition ici, mais qui ne correspond pas parfaitement, mais l\'idée de sauter le tour de l\'autre a coup sur (squeezer le tour de l\'autre) est assez proche: http://www.mediadico.com/dictionnaire/definition/squeezer
-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 21/10/2012 17:32 | # | Fichier joint
en passant, quand il n'y en a plus, il y en a encore:
J'ai un "Type mismatch" qui pointe sur une fonction déclarée comme cela: int Error(int code)
Je vois pas comment corriger... (je vous met le .h et le .c en fichier joint)
-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 22/10/2012 13:54 | #
Pas de problème de compilation avec ces fichiers, à part que tu as squeezé les caractères de fin de chaîne.
Si tu compiles en c++ la conversion d'un int en unsigned (ou inversement) doit être explicite.
Citer : Posté le 19/12/2012 17:31 | #
Ce boulet, j'ai refait la même erreur qu'ici
Ajouté le 19/12/2012 à 17:32 :
tient, un bug ?
Citer : Posté le 14/01/2013 00:04 | #
j'ai un truc a vous montrer, sans trucage:
qui a déjà eut cette erreur? 8) (au moment ou j'ai pris le screen, ça fessait déjà 10 secondes que l'émulateur avait craché...)
-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 14/01/2013 07:21 | #
tiens, tu met ta barre d'outils a droite toi?
envie de plonger dans la mer pour ramasser des tresors? => ballon sea
envie de sauver l'univers dans un jeu avec une longue durée de vie? => saviors of the future
un add-in addictif avec plein de secret et de trophées => evasion survival
un shmup bien dur et sadique => saviors 2
merci a tout le monde pour son soutien
zelda prizm de smashmaster (en esperant qu'il puisse le finir)
les tests de marmotti
un RPG de dark storm
(dont je connais le nom, mais pas vous )Arcuz !Citer : Posté le 14/01/2013 09:56 | #
Euh je pense que tu parle de la barre des taches qui est à gauche, non ?
Citer : Posté le 14/01/2013 17:44 | #
Oui, je met ma barre de tache a gauche car j'aime pouvoir me déplacer rapidement dans tout mes logiciels et dossiers, sans avoir a chercher.
Quant a l'erreur, je sais toujours pas comment la virer...
Ajouté le 14/01/2013 à 17:44 :
Oui, je met ma barre de tache a gauche car j\'aime pouvoir me déplacer rapidement dans tout mes logiciels et dossiers, sans avoir a chercher.
Quant a l\'erreur, je sais toujours pas comment la virer...
-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 14/01/2013 21:42 | #
Quelle erreur ? L'affichage du popup n'est pas prévu dans ton code ?
Le popup peut être affiché par certaines fonctions système genre une lecture de carte SD ou peut-être un memcpy.
Et c'est pas une erreur de compilation
Citer : Posté le 14/01/2013 23:06 | #
L'affichage du popup n'est pas prévu dans ton code ?
Absolument pas, je ne savais même pas qu'un tel message existait.
Le pop-up apparaît depuis que je fais un test en créant et supprimant un fichier, rien de plus.
Ajouté le 15/01/2013 à 10:26 :
Ok, c\'est bon, j\'ai trouvé et corrigé mon problème et sa n’affirme qu\'encore plus mon impression que Casio code ces fonctions avec les pieds
L\'erreur ne venait même pas de moi, c\'est un comble...
Existe-t-il une alternative viable aux Bfile_ ?
-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/02/2013 18:36 | #
Je viens de tomber sur une erreur que je n'avais pas jusqu'ici, mais qui s'est réveillé comme ça
C:\Documents and Settings\Papa_2\Bureau\FruitNinja\FruitNinja\moteur.c(391) : C2203 (E) Illegal member reference for "."
(Ca fois 7: des lignes 391 à 392)
if(fruits[i ].couper == 0)
{
ML_bmp_16_or_cl(objets[fruits[i ].objet][fruits[i ].idImage], 10, 38);
}
else J'utilise des pointeurs dans des tableaux de structure:
{
ML_bmp_or_cl(objets[fruits[i ].objet][fruits[i ].idImage], fruits[i ].bout1x, fruits[i ].bout1y, 16, 8); // on envoie comme pointeur à ML_bmp celui disponible sur la ligne correspondant au type de fruit à afficher: objets[fruits[i ].objet] et dans la colone de l'image affichée: [fruits[i ].idImage] (sur les 8 dispo)
ML_bmp_or_cl((objets[fruits[i ].objet][fruits[i ].idImage])+16, fruits[i ].bout2x, fruits[i ].bout2y, 16, 8);
}
Citer : Posté le 15/02/2013 21:59 | #
C'est laquelle la ligne 391 ? L'erreur est dans la déclaration de "fruits" ou de "objets".
Illegal array reference l'élément n'est pas un pointeur, donc pas le droit d'utiliser l'opérateur [ ] dessus
Illegal member reference for "." l'élément n'est pas une structure, donc pas le droit d'utiliser l'opérateur "."
Citer : Posté le 16/02/2013 18:35 | #
C'est bizarre parce que j'ai pu compiler plusieurs fois mes tests sans que ça bugue, et là, je n'ai rien touché à ces listes et structures...
Merci pour les commentaires sur les erreurs (d'ailleurs, tu pourrais les ajouter à la liste ?)
Ajouté le 19/02/2013 à 17:06 :
en fait, objets est une liste de pointeurs sur pointeurs
Citer : Posté le 19/02/2013 19:03 | # | Fichier joint
De mieux en mieux:
[gray]395[/gray] ML_line(6.4*cuts[i ].p1.x + 1, 3.2*cuts[i ].p1.y, 6.4*cuts[i ].p2.x, 3.2*cuts[i ].p2.y, ML_BLACK);
[gray]396[/gray] ML_line(6.4*cuts[i ].p1.x - 1, 3.2*cuts[ i].p1.y, 6.4*cuts[i ].p2.x, 3.2*cuts[i ].p2.y, ML_BLACK);
[gray]397[/gray] ML_line(6.4*cuts[i ].p1.x, 3.2*cuts[i ].p1.y + 1, 6.4*cuts[ i].p2.x, 3.2*cuts[ i].p2.y, ML_BLACK);
[gray]398[/gray] ML_line(6.4*cuts[i ].p1.x, 3.2*cuts[i ].p1.y - 1, 6.4*cuts[ i].p2.x, 3.2*cuts[i ].p2.y, ML_BLACK);
C:\Documents and Settings\Papa_2\Bureau\FruitNinja\FruitNinja\moteur.c(398) : C2205 (E) Undefined member name
C:\Documents and Settings\Papa_2\Bureau\FruitNinja\FruitNinja\moteur.c(398) : C2213 (E) Arithmetic type required for "*"
Sachant que j'utilise la même fonction au moins 4 foix avant, et que je n'ai pas d'erreur.
Ci joint mon fichier source, ne prenez pas peur, c'est pas du tout optimisé, j'en suis au travail en gros.
Citer : Posté le 19/02/2013 21:42 | #
Le type TL_Point n'est pas déclaré.
Citer : Posté le 19/02/2013 22:10 | #
Oui, je me suis rendu compte que la version de TouchLib que j'utilisais (et éditais) n'était pas la même que celle utilisée dans le projet
Du coup, j'en ai profité pour dépoussiérer le tout, et supprimer tous les trucs inutiles.
Je vous ferai part de ma lib une fois mon jeu terminé (dans 1 mois environ, les vacances arrivent)
Citer : Posté le 21/02/2013 20:33 | #
bonjour j'aurais besoin d'aide je n'arrive pas à faire le programme pour voir le niveau de batterie voici mon programme
int busy = 0;
void F01_1_Handler()
{
char s[4];
if ( busy ) return;
busy = 1;
memset(s, '\0', 4);
sprintf(s, "%d", MainBatteryPercentage());
PrintXY(78, y, (const unsigned char *) " ", 0);
PrintXY(78, y, (const unsigned char *) s, 0);
Bdisp_PutDisp_DD();
y++;
busy = 0;
}
int AddIn_main(int isAppli, unsigned short OptionNum)
{
unsigned int key;
Bdisp_AllClr_DDVRAM();
SetTimer(ID_USER_TIMER1, 100, (void *) F01_1_Handler);
while (1)
{
F01_1_Handler();
GetKey(&key);
}
return 1;
}
// instant syscalls (fx-9860)
#define SCA 0xD201D002
#define SCB 0x422B0009
#define SCE 0x80010070
typedef void(*sc_vpuc)(unsigned char*);
typedef int(*sc_iv)(void);
typedef int(*sc_i2pui)( unsigned int*, unsigned int* );
typedef int(*sc_i4pui)( unsigned int*, unsigned int*, unsigned int*, unsigned int* );
typedef int(*sc_i2puc2pus)( unsigned char*, unsigned char*, unsigned short*, unsigned short* );
typedef int(*sc_iipci)( int, unsigned char*, int );
const unsigned int sc003B[] = { SCA, SCB, SCE, 0x003B };
#define RTC_GetTicks (*(sc_iv)sc003B)
const unsigned int sc0D65[] = { SCA, SCB, SCE, 0x0D65 };
#define InputDateMonth (*(sc_i2pui)sc0D65)
const unsigned int sc0D67[] = { SCA, SCB, SCE, 0x0D67 };
#define InputDateYear (*(sc_i2pui)sc0D67)
const unsigned int sc0D64[] = { SCA, SCB, SCE, 0x0D64 };
#define InputDate (*(sc_i4pui)sc0D64)
const unsigned int sc0015[] = { SCA, SCB, SCE, 0x0015 };
#define GlibGetOSVersionInfo (*(sc_i2puc2pus)sc0015)
const unsigned int sc06C4[] = { SCA, SCB, SCE, 0x06C4 };
#define KBD_PRGM_GetKey (*(sc_vpuc)sc06C4)
const unsigned int sc0160[] = { SCA, SCB, SCE, 0x0160 };
#define LongToAsc (*(sc_iipci)sc0160)
// instant syscalls
// for fx9860 only!
#define PORT_E_DR 0xA4000128
#define OS202GII2 0x02020000
//
char IsSlim(){
if ( ( OSVersionAsInt() & 0xFFFF0000 ) == OS202GII2 ) return 0;
else return !( *(char*)PORT_E_DR & 0x08 );
}
//
char IsSD(){
return ( *(char*)PORT_E_DR & 0x01 );
}
//
int IsEmulator(){
return !( *(int*)0x8000FFD0 || *(int*)0x8000FFD4 );
}
#define OS102 0x01020000
#define OS103 0x01030000
#define OS104 0x01040000
#define OS105 0x01050000
#define OS1051 0x01051000
#define OS110 0x01100000
#define OS111 0x01110000
#define OS200 0x02000300
#define OS200slim 0x02000100
#define OS200GII 0x02000200
//
int OSVersionAsInt( void ){
unsigned char mainversion;
unsigned char minorversion;
unsigned short release;
unsigned short build;
GlibGetOSVersionInfo( &mainversion, &minorversion, &release, &build );
return ( ( mainversion << 24 ) & 0xFF000000 ) | ( ( minorversion << 16 ) & 0x00FF0000 ) | ( release & 0x0000FFFF );
}
//
int GetMainBatteryVoltagePointer(){
unsigned int ea;
unsigned int j;
ea = *(unsigned int*)0x8001007C;
ea = ea + 0x049C*4;
ea = *(unsigned int*)( ea );
while ( *(unsigned short*)( ea ) != 0xE464 ){
ea = ea + 2;
};
ea = ea + 2;
j = *(unsigned char*)( ea + 1 );
j = 4*j;
j = ( ea + j + 4 ) & 0xFFFFFFFC;
return *(unsigned int*)( j );
}
// battery = 1 = main (do not use other values)
// firstlevel: warning level
// secondlevel: shutdown level
int GetBatteryStatus( int battery, int*firstlevel, int*secondlevel ){
int (*iGBS)( int ) = 0; // declare an int function pointer
int*battconfig = (int*)0x80000334;
*firstlevel = 0x17F;
*secondlevel = 0x16D;
iGBS = (int(*)(int))GetMainBatteryVoltagePointer();
switch ( OSVersionAsInt() ){
case OS102 : break;
case OS103 : break;
case OS104 :
case OS105 :
if ( *battconfig==0x43444844 ){
*firstlevel = 0x1A5;
*secondlevel = 0x191;
};
break;
case OS1051 :
if ( *battconfig==0x43444844 ){
*firstlevel = 0x1A5;
*secondlevel = 0x191;
};
break;
case OS110 :
*firstlevel = 0x2AA;
*secondlevel = 0x288;
break;
case OS111 :
*firstlevel = 0x2AA;
*secondlevel = 0x288;
break;
case OS200 :
if ( *battconfig==0x43444844 ){
*firstlevel = 0x1A5;
*secondlevel = 0x191;
};
break;
case OS200GII :
break;
case OS200slim :
*firstlevel = 0x2AA;
*secondlevel = 0x288;
break;
};
if (IsSlim()){
*firstlevel = 0x2AA;
*secondlevel = 0x288;
}
if (iGBS!=0) return (*iGBS)( battery );
else return 0;
}
// the warning level lies around 2/3 full scale
int MainBatteryPercentage( void ){
int firstlevel, secondlevel;
int i;
if ( IsEmulator() ){
i = 100;
firstlevel = 70;
secondlevel = 65;
} else i = GetBatteryStatus( 1, &firstlevel, &secondlevel );
if (firstlevel > 0 ) return ( 200*i )/(firstlevel*3);
else return 0;
}
//
int F01_1_Handler(){
unsigned int key;
unsigned char x[21];
int currentlevel = 0;
memset( x, 0, sizeof( x ) );
while (1){
currentlevel = MainBatteryPercentage();
locate(5,3);
LongToAsc(currentlevel, (unsigned char*)x, 5 );
Print( (unsigned char*)x );
Print( "%" );
GetKey( &key );
if ( key == KEY_CTRL_EXIT ) break;
}
return 1;
}
voici les erreurs que ça me donne :
set SHC_INC=C:\CASIO\fx-9860G SDK\OS\SH\include
set PATH=C:\CASIO\fx-9860G SDK\OS\SH\bin
set SHC_LIB=C:\CASIO\fx-9860G SDK\OS\SH\bin
set SHC_TMP=D:\telechargement\casiosdk\test2\Debug
"C:\CASIO\fx-9860G SDK\OS\SH\bin\shc.exe" -subcommand=C:\Users\Pierre\AppData\Local\Temp\hmkD69.tmp
D:\telechargement\casiosdk\test2\test.c(22) : C2225 (E) Undeclared name "ID_USER_TIMER1"
D:\telechargement\casiosdk\test2\test.c(185) : C2136 (E) Type mismatch
D:\telechargement\casiosdk\test2\test.c(197) : C2225 (E) Undeclared name "KEY_CTRL_EXIT"
HMAKE MAKE UTILITY Ver. 1.1
Copyright (C) Hitachi Micro Systems Europe Ltd. 1998
Copyright (C) Hitachi Ltd. 1998
ERROR: Process failed with return code: 1
Build was not successful.
EDIT : j'ai essayé de m'inspiré de ce post
Citer : Posté le 21/02/2013 21:29 | #
Au début de ton fichier source, il faut mettre la ligne de code suivante, pour que le sdk puisse compiler:
#include "fxlib.h" // pour les fonctions utilisant les KEY_CTRL_*
Citer : Posté le 23/02/2013 11:28 | #
merci de ton aide mais maintenant j'ai ce problème:
Executing Hitachi SH C/C++ Compiler/Assembler phase
set SHC_INC=C:\CASIO\fx-9860G SDK\OS\SH\include
set PATH=C:\CASIO\fx-9860G SDK\OS\SH\bin
set SHC_LIB=C:\CASIO\fx-9860G SDK\OS\SH\bin
set SHC_TMP=D:\telechargement\casiosdk\test2\Debug
"C:\CASIO\fx-9860G SDK\OS\SH\bin\shc.exe" -subcommand=C:\Users\Pierre\AppData\Local\Temp\hmk89F8.tmp
D:\telechargement\casiosdk\test2\test.c(23) : C2225 (E) Undeclared name "ID_USER_TIMER1"
D:\telechargement\casiosdk\test2\test.c(186) : C2136 (E) Type mismatch
D:\telechargement\casiosdk\test2\test.c(196) : C1016 (W) Argument mismatch
HMAKE MAKE UTILITY Ver. 1.1
Copyright (C) Hitachi Micro Systems Europe Ltd. 1998
Copyright (C) Hitachi Ltd. 1998
ERROR: Process failed with return code: 1
Build was not successful.
PS: j'ai une graph35+ modifie en 75 avec SH4