IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Ca compile pas, c'est pas normal !


Sujet :

C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 19
    Points : 52
    Points
    52
    Par défaut Ca compile pas, c'est pas normal !
    Bonjour a tous, j'ai un probleme de compilation bizarre:
    Il y a deux jours j'ai modifié pas mal de parties de mon projet et ça compilait nickel, et marchait pareil.
    Comme c'est un shell je decide de rajouter l'edition de la ligne de commande et l'historique.
    Je modifie les sources en conséquence et là ça ne compile plus.
    Après avoir reglé les warnings usuels je bloque sur un warning mystique:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    error: expected '=', ',', ';', 'asm' or '__attribute__' before '->' token
    error: expected expression before '->' token
    Qui concerne une ligne du fichier header de ma librairie,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void    sort_int_tab(int *tab, int size);
    je supprime la ligne c'est pas grave je n'utilise pas la fonction déclarée a cette ligne là.
    Ensuite ça concerne le fichier header du projet cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int   ptr_tabsize(char **tab);
    qui donc ne contient pas de ->.

    Bon je commente la ligne, et là c'est de nouveau le meme warning sur deux lignes d'une fonction, qui au passage a toujours très bien passé la phase de compilation, voici les lignes en question:
    Sauf que là il n'y a toujours pas de ->

    J'ai modifié le fichier header du projet pour y rajouter une structure et des fonctions concernant les termcaps, listes chainées etc...
    Je pense que ça vient de là mais j'ai tout verifié je n'ai rien trouvé d'anormal.

    Si quelqu'un a une idée, ça serait sympa de m'en faire part, merci d'avance.

  2. #2
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Points : 5 306
    Points
    5 306
    Par défaut
    Poste le contenu du header car il doit forcément y avoir une erreur syntaxique qui précède les lignes citées

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 19
    Points : 52
    Points
    52
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
     
    #ifndef _TOTO_
    #define _TOTO_
    #include <stdio.h>
    #include <unistd.h>
    #include "libs/libmy.h"
    #include <stdlib.h>
    #include <fcntl.h>
    #include <dirent.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <sys/wait.h>
    #include <signal.h>
    #include <termios.h>
    #include <sys/ioctl.h>
    #include <term.h>
    #define BUFF 128
     
    extern char **environ;
    typedef struct termios  t_line;
    typedef struct winsize  t_w;
     
    typedef struct  s_list
    {
      char          *arg;
      struct s_list *next;
    }t_lst;
     
    typedef struct  s_gcom
    {
      char          type;
      struct s_list *com;
      struct s_gcom *next;
    }t_gm;
     
    typedef struct  s_hist
    {
      char          *command;
      struct s_hist *prev;
      struct s_hist *next;
    }t_hst;
     
    typedef struct  s_buffer
    {
      char          *prev_dir;
      char          *prompt;
    }t_buffer;
     
    /*Generic functions*/
    void    kill_it(int sig);
    int     char_isalpha(char character);
    void    str_cpy_from_to(int start, char *dest, char *src, char separator);
    int     my_len_from(char *str, int n);
    int     my_len_to(char *str, char separator);
    int     my_len_from_to(int start, char *str, char separator);
    void    xfree_ptr_tab(char **ptr);
    int     test_for_path(char *name);
    /*int   ptr_tabsize(char **tab);*/
    void    free_all(char *name, char **argv, char **paths, t_buffer *buffer);
    int     str_equal(char *str1, char *str2);
     
    /*Functions for command line acquisition & editing*/
    char    *my_strredup(char *str1, char *str2);
    void    hist_down(t_hst **hist, char *line);
    void    hist_up(t_hst **hist, char *line);
    void    keys(char *buf, char *line, t_buffer *shdat, t_hst **hist);
    char    *get_entry_line(t_buffer *shdat, t_hst *hist);
    void    line(t_buffer *buffer, t_hst **hist);
     
    /*Function for history management*/
    void    add_node_hist(char *data, t_hst **list);
     
    /*functions for tty setting*/
    int     reset_line(void);
    int     set_line(void);
     
    /*Termcaps functions*/
    int     outc(int c);
    char    *xtgetstr(char *cap, char **area);
    int     xcap(char *cap);
    void    reverse_v(void);
    void    dis_reverse(void);
    int     clr_line(int pos);
    void    clr_screen(void);
    int     put_cur(int x, int y);
    void    cursor_m(int pos);
    int     clear_cur(void);
    int     show_cur(void);
    int     term_size(void);
    char    *keycode(char *cap);
     
    /*For command line & env storage*/
    void    add_node(char *data, t_lst **list);
    void    rev_list(t_lst **begin);
    void    xfree_list(t_lst *list);
    int     list_len(t_lst *list);
    t_lst   *get_node(int node, t_lst *list);
    int     insert_data(char *data, int node, t_lst **list);
    int     insert_node(int node, char *data, t_lst **list);
    int     del_node(int node, t_lst **list);
    int     del_node2(t_lst *node, t_lst **list);
     
    /*Pwd functions*/
    unsigned int    root_ino(void);
    char            *dir_name(unsigned int inode);
    char            *make_path(char *path, char *new);
    char            *pathfinder(unsigned int inode);
    char            *pwd(void);
     
    /*Functions for buffer handling*/
    void    init_buffer(t_buffer *b, t_lst *env);
     
    /*Functions for error handling*/
    int     get_error_full(char *name);
    int     get_error(char *name, char **paths);
    char    *is_file(char *name, char **paths);
    int     is_permission(char *full_path, int permission);
    int     is_type(char *full_path, int type);
     
    /*Functions for signal handling*/
    void    sig_father(void);
    void    sig_son(void);
    int     print_signal(char *name, int child_pid, int sig);
    int     print_signal2(char *name, int sig);
    int     print_state(char *name, int child_pid, int sig);
     
    /*Functions for executing commands*/
    int     exec(char *name, char **argv);
    int     launch(char *name, char **argv, t_buffer *buffer);
    int     launch_full(char *name, char **argv, t_buffer *buffer);
    int     fork_it(char *name, char **argv, t_buffer *buffer);
    int     check_param(int argc);
    int     execute(char *command_line, t_buffer *buffer, t_lst *env);
     
    /*Builtins functions*/
    int     execute_builtin(char *name, t_lst *argv, t_lst *envp, t_buffer *buffer);
    int     execute_builtin2(char *name, t_lst *argv, t_lst *envp);
    int     unset_env(t_lst *var, t_lst *content, t_lst *envp);
    void    reassign_env(char *var, char *content, t_lst *envp);
    int     set_env(t_lst *var, t_lst *content, t_lst *envp);
    void    env(t_lst *envp);
    int     check_env_name(char *var);
     
    /*Function used for cd builtin*/
    char    *get_dir(t_lst *argv, t_lst *env);
    int     cd_get_error(char *name);
    int     change_dir(t_lst *argv, t_buffer *buffer, t_lst *env);
    int     cd_check_input(t_lst *argv);
    int     update_pwd(t_lst *env);
    int     upd_prev_dir(t_buffer *buffer, t_lst *env);
    int     cd_prev(t_buffer *buffer, t_lst *env);
    void    cd(char *dir, t_buffer *buffer, t_lst *env);
     
    /*Functions for arguments handling*/
    int     arg_len(char *str, int start);
    char    *arg_cpy(char *argv, char *command_line, int start);
    t_lst   *list_args(char *command_line);
    char    *command_name(char *command_line);
     
    /*Environment functions*/
    char    *env_cpy(char *var, t_lst *envp);
    t_lst   *search_for_var_pos(char *var, t_lst *envp);
    t_lst   *environment_cpy(char **envp);
    void    add_env(char *var, char *content, t_lst *envp);
    char    *make_var(char *var, char *content);
    char    **fill_environ(char **environ, char **envp);
    char    *comp_var_name(char *var);
    t_lst   *suppr_env(char *var, t_lst *envp);
     
    /*Functions for path handling*/
    char    *make_full_path(char *name, char *path);
    char    *path_cpy(char *dest, const char *src, int start);
    int     path_len(char *str, int start);
    char    **list_paths(char *var, t_lst *envp);
     
    /*Home resolution functions*/
    char    *before_home(char *before, char *command_line, char *home, int i);
    char    *resolve_home(char *command_line, t_lst *envp);
    char    *replace_tilde(char *command_line, t_lst *envp, int start);
    #endif
    Voila bon courage et merci j'ai cherché mais vraiment je vois pas

  4. #4
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Points : 5 306
    Points
    5 306
    Par défaut
    • T'es sur que l'erreur ne fait pas référence au fichier source ?
    • C'est quoi "libs/libmy.h" ?
    • T'es sur que ce fichier la est clean ?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 19
    Points : 52
    Points
    52
    Par défaut
    Citation Envoyé par vicenzo Voir le message
    • T'es sur que l'erreur ne fait pas référence au fichier source ?
    • C'est quoi "libs/libmy.h" ?
    • T'es sur que ce fichier la est clean ?
    -je vois mal pourquoi il y aurait un probleme dans ce fichier malgré ce qu'indique gcc car je n'ai pas touché a ce fichier quand j'ai fait les modifications et il ne generait pas d'erreur les fois precedentes

    libs/libmy.h c'est le fichier header de ma librairie

    étant donné que j'utilise libmy.h avec TOUS mes projets oui je pense qu'il est clean, il contient juste des prototypes

  6. #6
    Membre éprouvé Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Points : 1 132
    Points
    1 132
    Par défaut
    Salut,

    Je sais que ceci n'a pas de sens, mais essaie de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    int   ptr_tabsize(char **tab1);
    /* ou tout autre nom à la place de ce qui suit ...*/
    int   ptr_tabsize(char **tab);
    Je suis peut-être fou, mais chez moi c'est le mot 'tab' qui pause problème avec ton fichier

    @++

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 19
    Points : 52
    Points
    52
    Par défaut
    Citation Envoyé par ssmario2 Voir le message
    Salut,

    Je sais que ceci n'a pas de sens, mais essaie de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    int   ptr_tabsize(char **tab1);
    /* ou tout autre nom à la place de ce qui suit ...*/
    int   ptr_tabsize(char **tab);
    Je suis peut-être fou, mais chez moi c'est le mot 'tab' qui pause problème avec ton fichier

    @++
    Bah non t'es pas fou, avec
    int ptr_tabsize(char **ptr);
    cette ligne ne pose plus probleme, ça me tue ça, ce header et ce prototype je l'ai toujours utilisé depuis le debut de ce projet qui date d'il y a quelques mois, je l'ai compilé, modifié, re compilé des milliers de fois ce proj et ça n'a jamais posé probleme
    Par contre pour l'autre probleme je ne vois vraiment pas:

    src/fct_paths.c: In function 'list_paths':
    src/fct_paths.c:8: warning: ISO C forbids nested functions
    src/fct_paths.c:8: error: expected '=', ',', ';', 'asm' or '__attribute__' before '->' token
    src/fct_paths.c:8: error: expected expression before '->' token
    src/fct_paths.c:9: warning: ISO C90 forbids mixed declarations and code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    char    **list_paths(char *var, t_lst *envp)
    {
      char  **paths;
      char  *temp;
      int   lines;
      int   i;
     
      temp = env_cpy(var, envp);
      lines = size_of_ptr_tab(temp, 0, ':');
      paths = (char **)xmalloc((lines + 1) * sizeof(temp));
      lines = 0;
      i = 0;
      paths[lines] = (char *)xcalloc((path_len(temp, i) + 1) * sizeof(paths[lines]));
      path_cpy(paths[lines], temp, i);
      lines++;
      while (temp[i] != '\0')
        {
          if (temp[i] == ':')
            {
              paths[lines] = (char *)xcalloc((path_len(temp, (i + 1)) + 1) * sizeof(paths[lines]));
              path_cpy(paths[lines], temp, (i + 1));
              lines++;
            }
          i++;
        }
      paths[lines] = NULL;
      xfree(temp);
      return (paths);
    }
    Les lignes en cause sont:
    Je vois pas trop quelle peut etre la feinte

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 19
    Points : 52
    Points
    52
    Par défaut
    en fait la feinte était de remplacer lines par j.
    Quelqu'un peut il m'expliquer cette bizarrerie? Est ce que ce serait parce qu'un a moment donnée du source j'aurais utilisé une variable nommée lines egalement et que gcc se serait melangé les pinceaux, je pense qu'il a cru que je voulais declarer la fonction clr_line(); dans list_paths. Bref 4 heures de prise de tete pour ça.
    Merci a vous

  9. #9
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par ssmario2 Voir le message
    Je sais que ceci n'a pas de sens, mais essaie de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    int   ptr_tabsize(char **tab1);
    /* ou tout autre nom à la place de ce qui suit ...*/
    int   ptr_tabsize(char **tab);
    Je suis peut-être fou, mais chez moi c'est le mot 'tab' qui pause problème avec ton fichier
    C'est une très bonne idée. Il peut en effet y avoir conflit avec autre chose. Je conseille de suffixer les paramètres avec _ ou __
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int   ptr_tabsize(char **tab_);
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int   ptr_tabsize(char **tab__);
    Ne pas préfixer (_tab), c'est réservé à l'implémentation.

    http://emmanuel-delahaye.developpez....htm#id_reserve

    Malgré les précautions prises, je suis prêt à parier un bouton culotte, qu'un gugusse va me faire un préfixe _ en se croyant plus malin que les autres...

  10. #10
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Tisiph0n3 Voir le message
    Les lignes en cause sont:
    Je vois pas trop quelle peut etre la feinte
    lines est probablement une macro définie ailleurs...

    Il est un principe de conception bien connu qui dit :

    "La longueur d'un identificateur est proportionnel à sa portée"

    Ca évite ce genre de conflit... 'lines' est trop long pour être de portée si réduite (et trop court pour être de portée globale). j est OK.

    Mais le 'lines' globale doit être trouvé (dans un header, forcément) et renommé, car il est trop court.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 19
    Points : 52
    Points
    52
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    lines est probablement une macro définie ailleurs...

    Il est un principe de conception bien connu qui dit :

    "La longueur d'un identificateur est proportionnel à sa portée"

    Ca évite ce genre de conflit... 'lines' est trop long pour être de portée si réduite (et trop court pour être de portée globale). j est OK.

    Mais le 'lines' globale doit être trouvé (dans un header, forcément) et renommé, car il est trop court.
    Erf ça m'apprendra a vouloir faire du lisible
    Merci

  12. #12
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Tisiph0n3 Voir le message
    Erf ça m'apprendra a vouloir faire du lisible
    Merci
    OK. Si c'est résolu ->

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Doctrine] Pas d'index, pas de timestamp, pas de valeur par defaut
    Par Snooky68 dans le forum ORM
    Réponses: 1
    Dernier message: 30/06/2011, 10h22
  2. Réponses: 0
    Dernier message: 10/05/2008, 20h42
  3. Réponses: 1
    Dernier message: 07/04/2006, 13h35
  4. [débutant] Lire et compiler un source qui n'est pas de moi
    Par Le Furet dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 21/01/2006, 13h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo