Probleme de compilateur.

damish Messages postés 26 Date d'inscription mardi 11 janvier 2005 Statut Membre Dernière intervention 15 décembre 2006 - 10 août 2005 à 22:25
whikie Messages postés 99 Date d'inscription vendredi 24 juin 2005 Statut Membre Dernière intervention 17 septembre 2005 - 13 août 2005 à 09:59
Bonsoir a tous.j ai un probleme pour ce qui est des compilateurs.
Je débute dans le c & c++ dans des application dos et j ai récuperer quelques sources que je voudrai executer mais lors de la compilation il me trouve plusieurs erreur.j ai essayer sous devcpp,c++builder 6
les sources on été faites sous turbo c++ mais je ne comprend pas grand chose au logiciel.est ce possible de m'expliquer son fonctionnement ou des tutos que vous connaiteriez.Jai fait une recherche sur google mais je n'est pas trouvé grand chose.

merci de votre aide
damish.

28 réponses

vinc1008881 Messages postés 257 Date d'inscription dimanche 22 août 2004 Statut Membre Dernière intervention 29 septembre 2010 3
10 août 2005 à 22:45
Pour dev-cpp :



Fichier, nouveau, projet, "console application", ok

la tu entre ton code ds la fenetre.........



Pour compiler : c'est F9 (compiler + executer).Le log des erreur se trouve en bas...voila,



@+, vinc1008881


<hr size="2" width="100%">Le goto, c'est comme le parachute, tu ne l'utilise preske pas : mais quand t'en as besoin..........
0
damish Messages postés 26 Date d'inscription mardi 11 janvier 2005 Statut Membre Dernière intervention 15 décembre 2006
10 août 2005 à 22:58
passe pas sous dev cpp.
le code source:
//----------------------------------------------------------------------//
// FICHIER : 2DCHAP1.CPP //
// AUTEUR : Shaun Dore //
// DESCRIPTION : Starfield horizontal pour demontrer putpixel //
// DATE DE MODIFICATION : 30-09-97 //
// COMPILATEUR : Borland Turbo C++ Real Mode 16-bit compiler //
// NOTES : Compiler avec modele memoire COMPACT //
//----------------------------------------------------------------------//

//----------------------------------------------------------------------//
// Fichiers include //
//----------------------------------------------------------------------//

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

//----------------------------------------------------------------------//
// Declaration des constantes //
//----------------------------------------------------------------------//

#define MAX_ETOILES 500

//----------------------------------------------------------------------//
// Types personalises //
//----------------------------------------------------------------------//

typedef struct type_etoile // Pour contenir les infos sur chaque etoiles
{ // Coordonnees x,y et "z"
int x,y,z;
};

//----------------------------------------------------------------------//
// Variables globales //
//----------------------------------------------------------------------//

char *ecran = (char *) (0xA0000000L); // Pointeur sur RAM video

//----------------------------------------------------------------------//
// setmode - Appelle le mode passer en parametre //
//----------------------------------------------------------------------//
void setmode(unsigned int mode)
{
asm {
MOV AX, mode
INT 0x10
}
}

//----------------------------------------------------------------------//
// putpixel - Affiche un pixel directement dans la memoire //
//----------------------------------------------------------------------//
void putpixel (int x, int y, unsigned char coul)
{
ecran[(y*320)+x] = coul;
}

//----------------------------------------------------------------------//
// Fonction MAIN //
//----------------------------------------------------------------------//
void main()
{
// Rappel mathematique: % = modulo, le reste de la division entiere
// x mod y donne toujours entre 0 et y ex: x % 15 donne toujours
// un nombre entre 0 et 15. Bon moyen pour ramener des valeurs dans
// un cadre defini. On s'en sert en adressage disperse.
int et;
unsigned char coul;
type_etoile etoiles[MAX_ETOILES]; // Tableau d'etoiles du type etoiles
// definie plus haut
setmode(0x13);
randomize(); // Generateur de nombres aleatoires
for (int i=0;i<=MAX_ETOILES;i++) // Initialise la structure a 0
{
etoiles[i].x = 0;
etoiles[i].y = 0;
etoiles[i].z = 0;
}
do
{
for (et=0;et<MAX_ETOILES;et++)
{
for (unsigned int ralenti=0; ralenti<=1000; ralenti++) {} // Ralentir!
putpixel(etoiles[et].x,etoiles[et].y,0);
//efface ancienne position
etoiles[et].x = etoiles[et].x - (etoiles[et].z % 15 + 1);
// la vitesse de deplacement en fonction du z
if (etoiles[et].x <= 0) // si l'etoile est a gauche...
{
etoiles[et].x = 319; // on la remet a droite,
etoiles[et].y = random (200); // a une nouvelle hauteur,
etoiles[et].z = random (256); // sur un nouveau z.
}
coul etoiles[et].z % 15 + 17; // 17-32 tons de gris
putpixel(etoiles[et].x,etoiles[et].y,coul); // affiche nouvelle position
}
} while (!kbhit());

setmode(0x03);
printf("Shaun Dore\ndores@videotron.ca\nhttp://pages.infinit.net/shaun/");
}
et voila le raport d erreur
C:\Dev-Cpp\main.cpp In function `void setmode(unsigned int)':
44 C:\Dev-Cpp\main.cpp expected `(' before '{' token
44 C:\Dev-Cpp\main.cpp expected asm body before '{' token
45 C:\Dev-Cpp\main.cpp `MOV' undeclared (first use this function)
(Each undeclared identifier is reported only once for each function it appears in.)
45 C:\Dev-Cpp\main.cpp expected `;' before "AX"
45 C:\Dev-Cpp\main.cpp At global scope:
62 C:\Dev-Cpp\main.cpp `main' must return `int'
C:\Dev-Cpp\main.cpp In function `int main(...)':
72 C:\Dev-Cpp\main.cpp `randomize' undeclared (first use this function)
91 C:\Dev-Cpp\main.cpp `random' undeclared (first use this function)
C:\Dev-Cpp\Makefile.win [Build Error] [main.o] Error 1 .
cela vient t il du compilateur?
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
10 août 2005 à 23:00
Laisse tomber les sources turbo c++, c'est du 16 bits, au musée.
Tu en as des tas ici en 32 bits sur devcpp.

ciao...
BruNews, MVP VC++
0
damish Messages postés 26 Date d'inscription mardi 11 janvier 2005 Statut Membre Dernière intervention 15 décembre 2006
10 août 2005 à 23:07
si tu l'dit :)j debute donc je connai pas beaucoup j'arrive du php.
merci!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
11 août 2005 à 02:13
Salut,

Si tu comptes travailler sous DOS, il est préférable d'utiliser le
compilateur Turbo C ou Turbo C++, les deux sont téléchargeables
gratuitement sur le site de Borland dans sa section "Musée". Ton code
et les autres passeront sans problème.
0
damish Messages postés 26 Date d'inscription mardi 11 janvier 2005 Statut Membre Dernière intervention 15 décembre 2006
11 août 2005 à 13:56
Le probleme c est que j ai du mal a l'utiliser.on ne ce moque pas :)connai tu un tutos?
merci
0
whikie Messages postés 99 Date d'inscription vendredi 24 juin 2005 Statut Membre Dernière intervention 17 septembre 2005
11 août 2005 à 14:38
j'ai trouvé quelques solutions a ton ton probleme (pas tout hélas)

Déja ta procedure main() doit absolument renvoyé un int et pas un void
ensuite la syntaxe de l'asm sous devcpp est particuliere j'ai trouvé ca a cet adresse : http://www.cppfrance.com/forum.v2.aspx?id=96066


donc en refaisant ton code avec ces infos :

//----------------------------------------------------------------------//
// FICHIER : 2DCHAP1.CPP //
// AUTEUR : Shaun Dore //
// DESCRIPTION : Starfield horizontal pour demontrer putpixel //
// DATE DE MODIFICATION : 30-09-97 //
// COMPILATEUR : Borland Turbo C++ Real Mode 16-bit compiler //
// NOTES : Compiler avec modele memoire COMPACT //
//----------------------------------------------------------------------//


//----------------------------------------------------------------------//
// Fichiers include //
//----------------------------------------------------------------------//


#include <stdio.h>
#include <conio.h>
#include <stdlib.h>


//----------------------------------------------------------------------//
// Declaration des constantes //
//----------------------------------------------------------------------//


#define MAX_ETOILES 500


//----------------------------------------------------------------------//
// Types personalises //
//----------------------------------------------------------------------//


typedef struct type_etoile // Pour contenir les infos sur chaque etoiles
{ // Coordonnees x,y et "z"
int x,y,z;
};


//----------------------------------------------------------------------//
// Variables globales //
//----------------------------------------------------------------------//


char *ecran = (char *) (0xA0000000L); // Pointeur sur RAM video


//----------------------------------------------------------------------//
// setmode - Appelle le mode passer en parametre //
//----------------------------------------------------------------------//
void setmode(unsigned int mode)
{
asm("MOV AX, mode");
asm("INT 0x10");



}
//----------------------------------------------------------------------//
// putpixel - Affiche un pixel directement dans la memoire //
//----------------------------------------------------------------------//
void putpixel (int x, int y, unsigned char coul)
{
ecran[(y*320)+x] = coul;
}


//----------------------------------------------------------------------//
// Fonction MAIN //
//----------------------------------------------------------------------//
int main()
{
// Rappel mathematique: % = modulo, le reste de la division entiere
// x mod y donne toujours entre 0 et y ex: x % 15 donne toujours
// un nombre entre 0 et 15. Bon moyen pour ramener des valeurs dans
// un cadre defini. On s'en sert en adressage disperse.
int et;
unsigned char coul;
type_etoile etoiles[MAX_ETOILES]; // Tableau d'etoiles du type etoiles
// definie plus haut
setmode(0x13);
randomize(); // Generateur de nombres aleatoires
for (int i=0;i<=MAX_ETOILES;i++) // Initialise la structure a 0
{
etoiles[i].x = 0;
etoiles[i].y = 0;
etoiles[i].z = 0;
}
do
{
for (et=0;et<MAX_ETOILES;et++)
{
for (unsigned int ralenti=0; ralenti<=1000; ralenti++) {} // Ralentir!
putpixel(etoiles[et].x,etoiles[et].y,0);
//efface ancienne position
etoiles[et].x = etoiles[et].x - (etoiles[et].z % 15 + 1);
// la vitesse de deplacement en fonction du z
if (etoiles[et].x <= 0) // si l'etoile est a gauche...
{
etoiles[et].x = 319; // on la remet a droite,
etoiles[et].y = random (200); // a une nouvelle hauteur,
etoiles[et].z = random (256); // sur un nouveau z.
} coul etoiles[et].z % 15 + 17; // 17-32 tons de gris
putpixel(etoiles[et].x,etoiles[et].y,coul); // affiche nouvelle position
}
} while (!kbhit());


setmode(0x03);
printf("Shaun Dore\ndores@videotron.ca\nhttp://pages.infinit.net/shaun/");
return 0;
}

j'obtiens les erreurs suivantes que les experts ici vont corriger tres vite

C:\Dev-Cpp\maincoorection.cpp In function `int main()':
71 C:\Dev-Cpp\maincoorection.cpp `randomize' undeclared (first use this function)
(Each undeclared identifier is reported only once for each function it appears in.)
90 C:\Dev-Cpp\maincoorection.cpp `random' undeclared (first use this function)
C:\Dev-Cpp\Makefile.win [Build Error] [maincoorection.o] Error 1

Bonne chance
0
whikie Messages postés 99 Date d'inscription vendredi 24 juin 2005 Statut Membre Dernière intervention 17 septembre 2005
11 août 2005 à 15:00
j'ai corrigé les erreurs de randomize par srand(0);
et random(200) par =(rand()%200);
random(256) par =(rand()%256);
a partir de ca le compilateur me trouve des erreurs que je ne saurais trouvé...(pas encore ..)

les as de l'assembleur a vos claviers

en effets les erreurs sont du à priori à la partie assembleur :

Assembler messages:
too many memory references for `mov'
suffix or operands invalid for `int'
C:\Dev-Cpp\Makefile.win [Build Error] [maincoorection.o] Error 1

Bonne chance
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
11 août 2005 à 15:18
sur !!! c'est de la syntaxe standard Intel que tu as.
Faut trouver la doc de l'exotique AT&T qu'emploie ton compilo.

Tu ne fais que perdre du temps avec ces vieilleries, dans quelques mois on ne trouvera plus un PC 32 bits en vente et ces progs 16 bits ne pourront même plus être lancés.

ciao...
BruNews, MVP VC++
0
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
11 août 2005 à 15:33
Salut,

Même si on arrive à compiler ce code, ça m'étonnerait qu'il
fonctionne car il fait appel à l'interruption INT10. Cela prouve qu'il
est conçu pour fonctionner en mode DOS pur. Pour travailler en mode DOS
pur, il faut démarrer l'ordinateur avec une disquette de démarrage de
Windows 98. Pour utiliser Turbo C++, il faut oublier le confort de
Windows. Il faut que le pilote de la souris soit installé pour pouvoir
l'utiliser. Pour ouvrir les menu on appuie sur F10, le role des autres
touches est toujours affiché etc... Il est vrai que c'est un peu
déroutant mais avec un peu d'habitude ça devient facile. C'est ce qu'on
faisait à la fin des années 80 et début des 90. Si tu n'as pas de
problème avec l'anglais, tu trouveras tout ce que tu veux dans les
fichiers d'aide fournis avec Turbo C++.

Bon courage.
0
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
11 août 2005 à 15:43
Il est vrai que DOS est dépassé. Mais son avantage pour le programmeur,
c'est qu'on peut exploiter le PC à fond. Toutes les ressource sont
disponible pour notre seul programme. Accès direct aux ports
d'entrée/sortie (pas besoin de DDK pour faire un pilote de carte
d'interfacage par exemple). Vitesse d'exécution maximale etc...
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
11 août 2005 à 16:04
On est bien d'accord mais c'est terminé alors on s'adapte et on suit le mouvement.
Qu'un jeune s'informe de ce qu'il y avait avant c'est bien mais faut surtout qu'il aille de l'avant, il n'y a pas de temsp à perdre en informatique, Intel ne les attendra pas.

ciao...
BruNews, MVP VC++
0
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
11 août 2005 à 19:08
Tu as tout à fait raison BruNews.
0
whikie Messages postés 99 Date d'inscription vendredi 24 juin 2005 Statut Membre Dernière intervention 17 septembre 2005
11 août 2005 à 22:10
ok je veux bien que devcpp soit une 'vieillerie' en tout cas pour y mettre de l'assembleur mais il a l'avantage d'etre gratuit et une interface en francais. Pour apprendre le c++ pour l'instant je m'y retrouve.


Je veux bien 'm'adapter' et 'suivre le mouvement' mais a quel prix ?
Je fais ca (apprendre la programmation) pour mon plaisir et je n'ai pas mais pas du tout envie d'y mettre beaucoup d'argent.

Intel ne m'attends pas c'est sur mais mon porte monnaie lui attend que je le remplisse plus vite que je le vide.

Alors si vous avez des pistes pour des compilateurs pas cher ( moins de 50 ? pour moi ...A chacun sa definition du 'pas cher') qui ne soit pas des 'vieillerie' et qui permettent de 'suivre le mouvement' je suis preneur.

A bientot
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
11 août 2005 à 22:36
C'est de Turbo C++ dont on parlait en tant que vieillerie.
Devcpp est seulement rustique.

ciao...
BruNews, MVP VC++
0
whikie Messages postés 99 Date d'inscription vendredi 24 juin 2005 Statut Membre Dernière intervention 17 septembre 2005
11 août 2005 à 22:45
lol comme moi
0
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
12 août 2005 à 15:43
Salut,


Pour apprendre, tu peux utiliser Dev-C++ mais il ne faut pas
l'utiliser pour compiler les vieux codes sources de Turbo C par
exemple. Tu trouveras plein d'exemples de codes sur ce site ou
ailleurs. Voici un petit exemple tout simple :


1- Tu ouvres Dev-C++.


2- Menu Fichier =>Nouveau =>Projet.


3- Clic sur "Windows Application".


4- Clic sur la zone du Nom et donne un nom à ton projet puis clic sur "Ok".


5- Tu choisis le répertoire dans lequel tu veux mettre ton projet puis clic sur "Enregistrer".


6- Clic droit sur la zone de texte qui apparait puis choisis "Selectionnet Tout".


7- Nouveau clic droit puis choisis "Supprimer".


8- Tu copies puis colle le code suivant:


#include <Windows.h>
int APIENTRY
WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)

{

MessageBox(0,"Bienvenue dans Windows!","Bonjour Whikie!",0);

return 0;

}

9- Clic sur le bouton "Compiler". Puisque c'est
la première compilation, il te demandera un Nom, laisse "main" puis
clic sur "Enregistrer".

10- Une petite boite s'affiche montrant la progression de la compilation. Clic sur "Fermer" quand c'est terminé.

11- Clic sur le bouton "Exécuter" et tu verras le résultat.
0
whikie Messages postés 99 Date d'inscription vendredi 24 juin 2005 Statut Membre Dernière intervention 17 septembre 2005
12 août 2005 à 19:01
Racpp>je commence a 'maitriser' ( oooh le vantard ) devcpp, je voulais juste donner un coup de main a Damish qui est à l'origine de ce post et en meme temps voir si je progressais dans mes connaissances du c++. Bon evidemment de l'assembleur s'est glissé la dedans. Je me dis que je vais acquerir de nouvelles informations (l'assembleur) et je decouvre qu'il existe deux types d'assembleur ou plus exactement deux syntaxes...(aie ma tête... 2 aspirines vite ..)...

Ce que je n'avais pas saisi c'est que le sujet avait devié sur le turbo c++ et que je croyais quer l'on parlais des compilateurs qui acceptaient une seule sorte de syntaxe assembleur et a priori Devcpp lui a choisi la plus ... heu complexe ? ... pourri ?....

Mais sinon je reitere ma question, quand je ne serait plus débutant (d'ici quelques années ... siecles ?) vers quel compilateur me tourner ?

A bientot
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
12 août 2005 à 19:29
Toujours se fier au marché et virer les idéologues, VS domine sans contestation possible, si tu veux bosser dans ce domaine il est indispensable de te faire la main dessus.
Pour autant ça ne dispense pas de s'intéresser aux autres, gcc en tête.

ciao...
BruNews, MVP VC++
0
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
12 août 2005 à 19:35
whikie >> Désolé, en regardant ton avant dernier message, j'ai
pensé que c'est toi l'auteur du post. J'ai pas vérifié en haut de la
page. Donc c'est à damish que j'ai adressé les message. On a parlé de
Turbo C++ car le code donné est fait pour ce compilateur:

//
COMPILATEUR :
Borland Turbo C++ Real Mode 16-bit compiler //

Avec ce compilateur sous DOS pur, son code compilera et s'exécutera sans problème.

On ne choisit pas un compilateur uniquement parce que sa syntaxe
assembleur est simple. Chaque compilateur a ses qualités et ses
défauts. Donc chacun choisit celui qui l'arrange le mieux.
0
Rejoignez-nous