Crunchez vos adresses URL
|
Rejoignez notre discord
|
Hébergez vos photos
Page 182 sur 182 PremièrePremière ... 82132172174175176177178179180181182
Affichage des résultats 5 431 à 5 446 sur 5446
  1. #5431
    Citation Envoyé par Cwningen Voir le message
    Par contre un enum ne peut pas être déclaré sans être également défini. S'il est utilisé dans plusieurs sources, il faut le mettre dans un header avec des gardes comme indiqué par Mr Slurp. Comme ça si le header se retrouve inclus plusieurs fois dans le même fichier source, les gardes empêcheront l'enum d'être défini plusieurs fois.
    Ouai, ça a été mon premier shot parce que généralement quand on a ce genre de problème, c'est qu'on veux partager des types complets entre plusieurs libs/app/fichiers et que à un certain point seul les header guard éviterons des problèmes de compilation.
    La programmation est une course entre le développeur, qui s’efforce de produire des applications à l’épreuve des imbéciles, et l’univers qui s’efforce de produire de meilleurs imbéciles... L’univers a une bonne longueur d’avance !!!

  2. #5432
    Je pense que ce qui n'est pas clair, le fond du truc, c'est le type doit être déclaré et défini dans la library et non dans l'application.
    Sleeping all day, sitting up all night
    Poncing fags that's all right
    We're on the dole and we're proud of it
    We're ready for 5 More Years

  3. #5433
    Citation Envoyé par Cwningen Voir le message
    Pas obligé, on peut avoir des structures anonymes tant qu'elles sont utilisées immédiatement, pour un alias ou une variable.

    Un enum peut être anonyme (même sans être utilisé immédiatement) et on peut déclarer plusieurs enums anonymes (qui seront des enums différents). Mais avec les enums il faut aussi vérifier que les noms de valeurs ne sont pas déjà utilisés. L'usage est d'ajouter un préfixe correspondant au type/module/... :
    Code:
    enum {
        MON_ENUM_A,
        MON_ENUM_B,
        MON_ENUM_C
    };
    Par contre un enum ne peut pas être déclaré sans être également défini. S'il est utilisé dans plusieurs sources, il faut le mettre dans un header avec des gardes comme indiqué par Mr Slurp. Comme ça si le header se retrouve inclus plusieurs fois dans le même fichier source, les gardes empêcheront l'enum d'être défini plusieurs fois.
    Hello,
    alors oui mon post plus haut est pas bon mais comme j'ai trouvé la solution je viens la poster ici.

    Donc je suis bien parti sur une solution à base de #ifdef (merci Mr Slurp).
    J'ai donc encadré mes typedef communs par une directive #ifdef LIB_ONLY dans les sources de ma librairie. Ensuite dans le makefile de la librairie, dans les options de compil j'ai déclaré un -DLIB_ONLY, ce qui fait que l'option est active lorsque je compile la librairie.
    Et donc quand je compile l'application avec ce fichier .h en source (via la librairie), la directive n'étant pas active, les types utilisés sont bien ceux déclarés dans l'appli et non dans la librairie.

    Et voilà ! ça fonctionne très bien.
    Merci à tous pour votre aide

  4. #5434
    Citation Envoyé par DjudjRed Voir le message
    Hello,
    alors oui mon post plus haut est pas bon mais comme j'ai trouvé la solution je viens la poster ici.

    Donc je suis bien parti sur une solution à base de #ifdef (merci Mr Slurp).
    J'ai donc encadré mes typedef communs par une directive #ifdef LIB_ONLY dans les sources de ma librairie. Ensuite dans le makefile de la librairie, dans les options de compil j'ai déclaré un -DLIB_ONLY, ce qui fait que l'option est active lorsque je compile la librairie.
    Et donc quand je compile l'application avec ce fichier .h en source (via la librairie), la directive n'étant pas active, les types utilisés sont bien ceux déclarés dans l'appli et non dans la librairie.

    Et voilà ! ça fonctionne très bien.
    Merci à tous pour votre aide

    Alors de rien, mais normalement avec les header guard, pas besoin de spécifier quoi que ce soit à la compile pour que ça marche, exemple concret sur cette page
    https://www.learncpp.com/cpp-tutorial/header-guards/
    La programmation est une course entre le développeur, qui s’efforce de produire des applications à l’épreuve des imbéciles, et l’univers qui s’efforce de produire de meilleurs imbéciles... L’univers a une bonne longueur d’avance !!!

  5. #5435
    C'est 2 unités de compilations séparées, c'est normal qu'un header guard ne suffise pas.

  6. #5436
    Oui je veux pouvoir compiler ma librairie à part sans dépendance.

  7. #5437
    Citation Envoyé par DjudjRed Voir le message
    Oui je veux pouvoir compiler ma librairie à part sans dépendance.
    Citation Envoyé par Garrluk Voir le message
    C'est 2 unités de compilations séparées, c'est normal qu'un header guard ne suffise pas.
    Il dit qu'il voit pas le rapport, ou alors on parle d'erreur de linkage avec des fonctions compilées plusieurs fois dans plusieurs projets mais linké ensemble à la fin.

    3 "binaire" : 2 exe, 1 lib
    lib_a est une shared lib
    bin_b include lib_a.h, et link avec son .so
    bin_a include lib_a.h ET bin_b.h mais ne link pas avec le .so car il n'utilise pas la fonction small_func, mais seulement la définition de structure qui est dans lib_a.h

    J'ai donc 3 unité de compilation distinctes et des inclusions multiple (bin_a include lib_a.h, puis bin_b.h qui lui même include lib_a.h
    Le tout compile sans la moindre directive de compilation. Juste des header guard.

    bin_a.h
    Code:
    #include <stdio.h>
    #include "lib_a.h"
    #include "bin_b.h"
    
    #ifndef BINA_H
    #define BINA_H
    
    struct in_header_bin_a {
        int i;
        struct in_header_lib_a a;
        struct in_header_bin_b b;
    };
    #endif
    bin_a.c
    Code:
    #include "bin_a.h"
    #include "bin_b.h"
    #include "lib_a.h"
    
    void main(void) {
        struct in_header_bin_a ba;
        struct in_header_bin_b bb;
        struct in_header_lib_a la;
    
        printf("%d", ba.i);
        printf("%f %f", ba.a.f, ba.b.s.f);
    }
    bin_a Makefile
    Code:
    default: bin_a
    
    bin_a.o: bin_a.c bin_a.h
    	gcc -c bin_a.c -o bin_a.o -I../lib_a/ -I../bin_b/
    
    bin_a: bin_a.o
    	gcc bin_a.o -o bin_a
    
    clean:
    	-rm -f bin_a.o
    	-rm -f bin_a
    --------------------------------------------

    bin_b.c
    Code:
    #include "bin_b.h"
    #include "lib_a.h"
    
    void main(void) {
        struct in_header_bin_b b;
        struct in_header_lib_a a;
    
        printf("%f", a.f);
        printf("%d %f", b.i, b.s.f);
        small_func(b.s);
    }

    bin_b.h
    Code:
    #include <stdio.h>
    #include "lib_a.h"
    
    #ifndef BINB_H
    #define BINB_H
    
    struct in_header_bin_b {
        int i;
        struct in_header_lib_a s;
    };
    #endif

    bin_b Makefile

    Code:
    default: bin_b
    
    bin_b.o: bin_b.c bin_b.h
    	gcc -c bin_b.c -o bin_b.o -I../lib_a/
    
    bin_b: bin_b.o
    	gcc bin_b.o -o bin_b -L../lib_a -l:lib_a.so
    
    clean:
    	-rm -f bin_b.o
    	-rm -f bin_b
    --------------------------------------------

    lib_a.c
    Code:
    #include <stdio.h>
    #include "lib_a.h"
    
    void small_func(struct in_header_lib_a a) {
        printf("%f", a.f);
    }
    lib_a.h
    Code:
    #ifndef LIBA_H
    #define LIBA_H
    
    struct in_header_lib_a {
        float f;
    };
    
    void small_func(struct in_header_lib_a a);
    #endif

    lib_a Makefile

    Code:
    default: lib_a.so
    
    lib_a.o: lib_a.c lib_a.h
    	gcc -c lib_a.c -o lib_a.o
    
    lib_a.so: lib_a.o
    	gcc -shared lib_a.o -o lib_a.so
    
    clean:
    	-rm -f lib_a.o
    	-rm -f lib_a.so
    Dernière modification par Mr Slurp ; 29/03/2024 à 15h02.
    La programmation est une course entre le développeur, qui s’efforce de produire des applications à l’épreuve des imbéciles, et l’univers qui s’efforce de produire de meilleurs imbéciles... L’univers a une bonne longueur d’avance !!!

  8. #5438
    Citation Envoyé par Mr Slurp Voir le message
    Il dit qu'il voit pas le rapport, ou alors on parle d'erreur de linkage avec des fonctions compilées plusieurs fois dans plusieurs projets mais linké ensemble à la fin.
    Tu as raison, j'ai lu trop vite, vu le problème des includes guards devraient suffire.

  9. #5439
    Salut les canards,

    Besoin d'un petit conseil "langage de programmation".

    Ma copine aurait besoin d'un outil pour lui simplifier la vie: son salaire varie en fonction des jours de congés, des maladies et des RTT pris sur l'année glissante, avec d'autres paramètres pris en compte... etc C'est un beau merdier au point que même ses RH s'y perdent. Elle souhaiterait un outil qui lui permetterais de calculer ses fluctuations de salaires et de "prédire" les futures fluctuations en fonction d'absences prévues.

    Je voudrais lui faire une petite App pour ca. Je sais que ca bénéficierais aussi à ses collègues donc j'aimerais un truc compilé, facilement distribuable avec un GUI (2 registres, un tableau, un graph et 3 boutons; rien de bien fifou=.

    Vers quel langage me tourner?

    C#, que je connais le mieux, me semble être un overkill.
    Rust, qui m'interresse, semble a chier pour les UI.
    Python est au cauchemar a distribuer.

    Je prend volontier des conseils.

  10. #5440
    Je vais ptêtre dire une connerie mais... pourquoi ne pas faire une app web ? Comme ça ça tourne n'importe où, sur mobile, pc, mac ..

  11. #5441
    Parce qu'il faut l’héberger ?
    "Tout est vrai, tout existe, il suffit d'y croire."
    Dieu. (enfin… je crois)

  12. #5442
    Citation Envoyé par Naity Voir le message
    C#, que je connais le mieux, me semble être un overkill.
    Si t'es confortable avec ça me paraît pas une si mauvaise idée. XAML est verbeux mais avec le designer intégré aux IDE t'as vite fait de bricoler une interface.

    Rust est jouable (iced est assez correct, ou egui si tu veux t'essayer aux joies de l'immediate mode) mais ce sera certainement un poil plus prise de tête vu ses spécificités.
    Sinon ouais du web (ou du C++ ).

  13. #5443
    Ça ressemble quand même à un truc qui pourrait être fait dans et avec un tableur.

    Citation Envoyé par Kamasa Voir le message
    Parce qu'il faut l’héberger ?
    Pas si tout tourne en javascript sur le client, il suffit de distribuer le HTML et les bricoles qui vont autour.

    Sinon Purebasic ?
    « Sans puissance, la maîtrise n'est rien »

  14. #5444
    Citation Envoyé par Foksadure Voir le message
    Ça ressemble quand même à un truc qui pourrait être fait dans et avec un tableur.
    Probablement la réponse la plus censée
    "Tout est vrai, tout existe, il suffit d'y croire."
    Dieu. (enfin… je crois)

  15. #5445
    Google appscript avec du google sheet, c'est du js avec une page html et voilà.

  16. #5446
    Citation Envoyé par Foksadure Voir le message
    Ça ressemble quand même à un truc qui pourrait être fait dans et avec un tableur.



    Pas si tout tourne en javascript sur le client, il suffit de distribuer le HTML et les bricoles qui vont autour.

    Sinon Purebasic ?
    Ah je pensais que pour le web il fallait que le serveur puisse calculer. J'ai un domaine et du stockage chez ovh. Je peux faire une page ou les calculs tournent chez le client?

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •