30

PiNGoO
: pquoi void main() est incorect (sous linux la version de gcc que j'utilise refuse de compiler s'il trouve "void main()" en me reclamant le int a la place, mais en revanche il prend "main()" tout cours)

void main() est incorrect parce qu'il faut renvoyer un "exit status" (c'est ce que demande le standard C). Et il prend main() tout cours parce que la valeur de retour par défaut est int, pas void. (D'ailleurs, cet "implicit int" a été supprimé dans le standard C99, donc les compilateurs C99 ne sont pas obligés d'accepter!)
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

31

J'ai lu que seuls ces prototypes étaient autorisés en C:
int main()
int main(int argc)
int main(int argc, char * argv[])
int main(int argc, char * argv[], char * env[])

Et pour pas être totalement HS:
Kevin Kofler :
Pour le problème du main ANSI, je pense m'en occuper un de ces jours (évidemment pour les 2 versions, pas juste pour la version *nix).

Comment tu penses le faire marcher?
On appellera le programme avec une seule chaîne de caractères, prog("argv1 argv2"), ou bien avec plusieurs?
avatar
;)

32

Plusieurs, chaque chaîne correspondant à une entrée dans argv.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

33

si sous pedrom ca marchait avec "prog argv1 argv2" ca serait le pied
avatar

34

Sous PedroM au lieu de faire
prog("str",2)
on fait
prog "str" 2
si je ne me trompe pas.
Donc il faudra faire
prog "argv1" "argv2"
Mais là on est sur le topic de Kevin, c'est un peu maladroit de parler de PedroM, à part si tu aimes te faire kicker. neutral
avatar
;)

35

lui donne pas de mauvaises idées toi.
Et ce n'est pas vraiment hors sujet vu que ca parle de POSIX et des évolutions de TIGCC
avatar

36

Uther
: si sous pedrom ca marchait avec "prog argv1 argv2" ca serait le pied

Ça, c'est le problème de PedroM (et donc de PpHd), pas le nôtre. Ce n'est pas moi qui code le parseur d'arguments de PedroM.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

37

[HS]Uther: Ca marche deja tongue. Il ne me reste plus qu'a faire un push arc, push argv. seules les apps y auront acces.[/HS]

38

Bon, j'ai encore trouvé deux bugs dans le frontend :\
1°/ Il prétend qu'il n'y a aucun fichier (et ne fait rien) dès qu'il n'y a aucun fichier source, alors qu'on devrait pouvoir le lancer uniquement pour linker, donc avec seulement des fichiers objet...
2°/ Il ignore l'option -o quand on met aussi -c ou -S
Je les ai corrigés, je mets le patch ici pour que tout le monde y ait accès (c'est relativement court et ça évitera de devoir re-télécharger toute l'archive sur le site de Kevin pour ceux qui l'ont déjà fait...)
Bon, à part ça, il serait sympathique que ça refuse l'option -o quand il y a aussi -c ou -S et plusieurs fichiers en entrée (là ça va juste écraser bêtement le même fichier n fois de suite), mais je n'ai pas le temps de m'en occuper.
*** tigcc.c~	Sun Sep 21 19:28:25 2003
--- tigcc.c	Sun Sep 21 19:25:26 2003
*************** void compile(char *file) 
*** 390,404 ****
      execute(gcc_name, gcc_argv);
    }
    else {
!     char *tmpfile = malloc (strlen (file) + 3);
  
!     if (!tmpfile) {
!       fprintf(stderr, "Fatal error: not enough free memory\n");
!       exit(-1);
!     }
        
!     strcpy(tmpfile, file);
!     change_extension(tmpfile, ".s");
  	
      if (debug) gcc_argv[local_argc++] = "-gcoff";
      gcc_argv[local_argc++] = "-S";
--- 390,408 ----
      execute(gcc_name, gcc_argv);
    }
    else {
!     char *tmpfile;
!     if (!do_assemble && outfile) tmpfile = outfile;
!     else {
!       tmpfile = malloc (strlen (file) + 3);
  
!       if (!tmpfile) {
! 	fprintf(stderr, "Fatal error: not enough free memory\n");
! 	exit(-1);
!       }
        
!       strcpy(tmpfile, file);
!       change_extension(tmpfile, ".s");
!     }
  	
      if (debug) gcc_argv[local_argc++] = "-gcoff";
      gcc_argv[local_argc++] = "-S";
*************** void assemble(char *file)
*** 426,449 ****
  {
    char as_name[strlen(tigcc_base) + sizeof (BIN_BASE) + 8];
    char includedir[strlen(tigcc_base) + 13];
!   char *tmpfile = malloc (strlen (file) + 3);
    char *argv[7 + (as_args ? strlen (as_args) / 2 : 0)];
    argv[0] = as_name;
    argv[1] = "-mc68000";
    argv[2] = includedir;
    argv[3] = file;
    argv[4] = "-o";
-   argv[5] = tmpfile;
  
!   if (!tmpfile) {
!     fprintf(stderr, "Fatal error: not enough free memory\n");
!     exit(-1);
    }
!     
    sprintf (as_name, "%s/bin/%sas", tigcc_base, BIN_BASE);
    sprintf (includedir, "-I%s/include/s", tigcc_base);
-   strcpy(tmpfile, file);
-   change_extension(tmpfile, ".o");
  
    // add the file to the list
    add_to_file_array(tmpfile, obj_files);
--- 430,457 ----
  {
    char as_name[strlen(tigcc_base) + sizeof (BIN_BASE) + 8];
    char includedir[strlen(tigcc_base) + 13];
!   char *tmpfile;
    char *argv[7 + (as_args ? strlen (as_args) / 2 : 0)];
    argv[0] = as_name;
    argv[1] = "-mc68000";
    argv[2] = includedir;
    argv[3] = file;
    argv[4] = "-o";
  
!   if (!do_link && outfile) tmpfile = outfile;
!   else {
!     tmpfile = malloc (strlen (file) + 3);
!     if (!tmpfile) {
!       fprintf(stderr, "Fatal error: not enough free memory\n");
!       exit(-1);
!     }
!     strcpy(tmpfile, file);
!     change_extension(tmpfile, ".o");
    }
! 
!   argv[5] = tmpfile;    
    sprintf (as_name, "%s/bin/%sas", tigcc_base, BIN_BASE);
    sprintf (includedir, "-I%s/include/s", tigcc_base);
  
    // add the file to the list
    add_to_file_array(tmpfile, obj_files);
*************** void convert(void)
*** 568,579 ****
  /* Execute A68K */
  void a68k(char *file)
  {
!   char *tmpfile = malloc (strlen (file) + 5);
!   if (!tmpfile) {
!     fprintf(stderr, "Fatal error: not enough free memory\n");
!     exit(-1);
    }
! 
    /* First, assemble file with A68k which produces AmigaOS files */
  
    {
--- 576,601 ----
  /* Execute A68K */
  void a68k(char *file)
  {
!   char *tmpfile;
!   if (!do_link && outfile) {
!     tmpfile = malloc (strlen (outfile) + 3);
!     if (!tmpfile) {
!       fprintf(stderr, "Fatal error: not enough free memory\n");
!       exit(-1);
!     }
!     sprintf(tmpfile, "-o%s", outfile);
    }
!   else {
!     tmpfile = malloc (strlen (file) + 5);
!     if (!tmpfile) {
!       fprintf(stderr, "Fatal error: not enough free memory\n");
!       exit(-1);
!     }
!     sprintf(tmpfile, "-o%s", file);
!     change_extension(tmpfile, ".o");
!   }
!   tmpfile += 2; /* Warning: this prevents free_file_array from working */
!   
    /* First, assemble file with A68k which produces AmigaOS files */
  
    {
*************** void a68k(char *file)
*** 590,599 ****
      sprintf (a68k_name, "%s/bin/a68k", tigcc_base);
      sprintf (includedir, "-i%s/include/asm/", tigcc_base);
  
-     sprintf(tmpfile, "-o%s", file);
-     tmpfile += 2; /* Warning: this prevents free_file_array from working */
-     change_extension(tmpfile, ".o");
- 
      // add the file to the list
      add_to_file_array(tmpfile, obj_files);
  
--- 612,617 ----
*************** int main(int argc, char *argv[]) 
*** 825,831 ****
    parse_args(&argc, argv);
  
    // check there is at least one file to process
!   if(!src_files->count && !asm_files->count && !a68k_files->count)
      {
        fprintf(stderr, "tigcc: no input files\n");
        exit(0);
--- 843,849 ----
    parse_args(&argc, argv);
  
    // check there is at least one file to process
!   if(!src_files->count && !asm_files->count && !a68k_files->count && !obj_files->count)
      {
        fprintf(stderr, "tigcc: no input files\n");
        exit(0);
avatar
« Le bonheur, c'est une carte de bibliothèque ! » — The gostak distims the doshes.
Membrane fondatrice de la confrérie des artistes flous.
L'univers est-il un dodécaèdre de Poincaré ?
(``·\ powaaaaaaaaa ! #love#

39

OK, merci pour le patch. Je ne vais probablement pas sortir une version 0.94 SP4 r3 parce que je suis déjà en train de travailler sur la version 0.95 Beta 1 r1 et que ça avance plutôt bien. Donc la première release "officielle" à contenir ce patch sera la 0.95 Beta 1 r1.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

40

J'ai trouvé et corrigé quelques autres bogues, mais il faudra attendre la version 0.95 Beta 1 r1 pour la correction parce que mes sources attendent maintenant TIGCC 0.95 (et un backport des corrections de bogues n'est pas très faisable à mon avis parce que j'ai tout changé en même temps, mais Sally, si tu veux quand-même essayer, je veux bien t'envoyer la nouvelle version et/ou le diff entre les 2).
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

41

Euh, non merci, je n'aurai pas le temps...
avatar
« Le bonheur, c'est une carte de bibliothèque ! » — The gostak distims the doshes.
Membrane fondatrice de la confrérie des artistes flous.
L'univers est-il un dodécaèdre de Poincaré ?
(``·\ powaaaaaaaaa ! #love#