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 :

[MacOsX|Linux] =>ok! pas sur solaris


Sujet :

C

  1. #1
    Membre du Club

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 23
    Points : 43
    Points
    43
    Par défaut [MacOsX|Linux] =>ok! pas sur solaris
    voici mon code (c'est un othello):
    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
     
    #include <stdio.h>
    #include <termios.h>
    #include <unistd.h>
    main() {
        void screeng(void);
        int coordx(void);
        int coordy(void);
        void ppion(int, int);
        void mode_raw(int);
        screeng();
        int i=1, j=1;
        while(i>0 && j>0 && i<9 && j<9) {
            mode_raw(1);
            i=coordx();
            j=coordy();
            mode_raw(0);
            if(i>0 && j>0 && i<9 && j<9) {ppion(i,j);}
        }
        system("clear");    
    }
    void ppion(int i, int j) {
        int x, y;
        x=(j*4);
        y=(i*2)+1;
        printf ("\033[%u;%uH", y, x);
        printf ("***");
    }
    int coordx(void) {
        printf ("\033[%u;%uH", 20, 1);
        printf("entrez un coord ('A'..'H') : ");
        char c;
        int i=0;
        c=getchar();
        if(c=='A' || c=='a') {i=1;}
        if(c=='B' || c=='b') {i=2;}
        if(c=='C' || c=='c') {i=3;}
        if(c=='D' || c=='d') {i=4;}
        if(c=='E' || c=='e') {i=5;}
        if(c=='F' || c=='f') {i=6;}
        if(c=='G' || c=='g') {i=7;}
        if(c=='H' || c=='h') {i=8;}
        return i; 
    }
    int coordy(void) {
        printf ("\033[%u;%uH", 21, 1);
        printf("entrez un coord (1..8) : ");
        char c;
        int i=0;
        c=getchar();
        if(c=='1') {i=1;}
        if(c=='2') {i=2;}
        if(c=='3') {i=3;}
        if(c=='4') {i=4;}
        if(c=='5') {i=5;}
        if(c=='6') {i=6;}
        if(c=='7') {i=7;}
        if(c=='8') {i=8;}
        return i; 
    }
    void screeng(void) {
        system("clear");
        printf("    1   2   3   4   5   6   7   8    \n");
        printf("  +---+---+---+---+---+---+---+---+  \n");
        printf("A |   |   |   |   |   |   |   |   | A\n");
        printf("  +---+---+---+---+---+---+---+---+  \n");
        printf("B |   |   |   |   |   |   |   |   | B\n");
        printf("  +---+---+---+---+---+---+---+---+  \n");
        printf("C |   |   |   |   |   |   |   |   | C\n");
        printf("  +---+---+---+---+---+---+---+---+  \n");
        printf("D |   |   |   |   |   |   |   |   | D\n");
        printf("  +---+---+---+---+---+---+---+---+  \n");
        printf("E |   |   |   |   |   |   |   |   | E\n");
        printf("  +---+---+---+---+---+---+---+---+  \n");
        printf("F |   |   |   |   |   |   |   |   | F\n");
        printf("  +---+---+---+---+---+---+---+---+  \n");
        printf("G |   |   |   |   |   |   |   |   | G\n");
        printf("  +---+---+---+---+---+---+---+---+  \n");
        printf("H |   |   |   |   |   |   |   |   | H\n");
        printf("  +---+---+---+---+---+---+---+---+  \n");
        printf("    1   2   3   4   5   6   7   8    \n");
    }
    void mode_raw(int activer) {
        static struct termios cooked;
        static int raw_actif = 0;
        if (raw_actif == activer) {return;}
        if (activer) {
            struct termios raw;
            tcgetattr(STDIN_FILENO, &cooked);
            raw = cooked;
            cfmakeraw(&raw);
            tcsetattr(STDIN_FILENO, TCSANOW, &raw);
       }
       else {tcsetattr(STDIN_FILENO, TCSANOW, &cooked);}
       raw_actif = activer;
    }
    sur solaris avec gcc :
    [ovandere@sunset ovandere]$ gcc othelloC.c
    Undefined first referenced
    symbol in file
    cfmakeraw /var/tmp//cc9HKoBN.o
    ld: fatal: Symbol referencing errors. No output written to a.out
    collect2: ld returned 1 exit status
    pouvez vous m'aider à comprendre ce qu'il ne va sur solaris?

  2. #2
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Tout d'abord,

    C'est

    avec un à la fin

    Ensuite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        void screeng(void);
        int coordx(void);
        int coordy(void);
        void ppion(int, int);
        void mode_raw(int);
    ne se met pas dans le main mais au dessus et en début de fichier (avec le mot clé static) ou dans un fichier d'en-tête.

    Jc

  3. #3
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par Van der Elst
    sur solaris avec gcc :
    [ovandere@sunset ovandere]$ gcc othelloC.c
    Undefined first referenced
    symbol in file
    cfmakeraw /var/tmp//cc9HKoBN.o
    ld: fatal: Symbol referencing errors. No output written to a.out
    collect2: ld returned 1 exit status
    pouvez vous m'aider à comprendre ce qu'il ne va sur solaris?
    D'ou vient fcmakeraw? Je ne connais pas, ca ne se trouve pas dans les man de solaris, ca ne se trouve pas dans POSIX.

    Hypothese 1, c'est une extension de termios disponible sur MacOS et Linux. Il te faut trouver un moyen de faire la meme chose.
    Hypothese 2, ca vient d'une bibliotheque tierce et tu oublies de la linker. Note que ce n'est pas une tres bonne idee de definir des noms ressemblant a ceux de termios (cfgetispeed, cfgetospeed, ...). Ce n'est pas non plus une tres bonne idee de se fier a la declaration implicite des fonctions.

    Note que compiler avec des warnings a un niveau plus eleve te permettra de faire la difference (-Wall -W avec gcc donne des warnings pour la declaration implicite des fonctions).
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  4. #4
    Membre du Club

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 23
    Points : 43
    Points
    43
    Par défaut
    grand merci pour votre aide,
    c'est bien la syntaxe qui est à l'origine des erreurs (int main(void) { et les déclaration)
    dommage que gcc sous mac et knoppix me laisse en commettre
    encore merci

    p.s. :
    -cfmakeraw(&raw); => trouvé tel quel dans la faq et mal interprété par moi-même
    -pardonnez mes erreurs je débute

  5. #5
    Membre averti
    Avatar de joellel
    Profil pro
    Inscrit en
    Février 2003
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2003
    Messages : 234
    Points : 338
    Points
    338
    Par défaut
    Un petit conseil: sous gcc, demande toujours l'affichage de TOUS les warnings.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    gcc -Wall programme.c
    Ca t'évitera beaucoup de surprises à l'exécution...

  6. #6
    Membre du Club

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 23
    Points : 43
    Points
    43
    Par défaut
    merci c'est pratique :-)
    othello.c:4: warning: return type defaults to 'int'
    othello.c: In function 'main':
    othello.c:19: warning: implicit declaration of function 'system'
    othello.c:20: warning: control reaches end of non-void function

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 15/05/2009, 09h57
  2. [GD] Est-ce que c'est possible qu'une fonction tourne mieux sur Win et pas sur Linux
    Par nkki_nkki dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 22/07/2007, 17h34
  3. Réponses: 19
    Dernier message: 02/07/2007, 18h38
  4. Réponses: 6
    Dernier message: 28/05/2007, 10h26
  5. [portabilité] ok sous Win, mais pas sur Mac/linux
    Par absolut75 dans le forum Général Java
    Réponses: 11
    Dernier message: 11/10/2006, 17h14

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