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

Affichage des résultats du sondage: Au finale, pour vous, faut-il

Votants
124. Vous ne pouvez pas participer à ce sondage.
  • séparer le C et le C++

    54 43,55%
  • les unir

    10 8,06%
  • les unir mais savoir différencier les deux "styles de programmation"

    42 33,87%
  • non mais t'as rien compris

    25 20,16%
Sondage à choix multiple
C++ Discussion :

C et C++ mythe et realité


Sujet :

C++

  1. #181
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    un #define du genre "#define MAX_SIZE 50" est à portée globale. Pour peux que tu inclues le fichier ou quoi, MAX_SIZE sera défini. Et tu peux très facilement définir un MAX_SIZE ailleurs qui va peut se retrouver au final écrasé ou vice-versa.

    Alors qu'avec static const, si tu rédéfinis ta variable dans un autre fichier, et si tu inclues le premier, tu auras une erreur de compilo. Tu contrôles ainsi à la fois la valeur (tu es sûr qu'elle ne bougera pas malgré des étourderies) mais aussi le typage ...

  2. #182
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Points : 1 543
    Points
    1 543
    Par défaut
    Salut,

    Je crois bien que l'utilisation de static dans ce cas de figure est déprécié en C++...
    Ainsi il est conseillé de faire simplement :
    Cela dit comme il ne faut jamais poluer le namespace par défaut il faut toujours, si c'est dans un .cpp utiliser un namespace anonyme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    namespace
    {
      const int i = 0;
    }
    Et dans un .h utiliser un vrai namespace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    namespace my_namespace
    {
      const int i = 0;
    }
    Ca permet d'éviter les collisions de nom.

    Ca vaut aussi pour les fonctions locales à une unité de compilation...

    MAT.

  3. #183
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    En effet, static est déprécié dans ce cas.

    Un const suffit.

  4. #184
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Points : 1 053
    Points
    1 053
    Par défaut
    Dites, chtite question, ça sert à quoi un namespace anonyme? C'est la première fois que je vois ça...

  5. #185
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Ca sert à limiter la portée de ce qui y est déclaré à l'unité de compilation dans laquelle cela se trouve. En C pour faire ça on utilise static.

  6. #186
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Points : 1 053
    Points
    1 053
    Par défaut
    Si j'ai bien compris, ça permet de déclarer deux fonctions portant le même nom avec les mêmes arguments dans deux .cpp différents sans que ça pose problème au link?

  7. #187
    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 zais_ethael Voir le message
    Si j'ai bien compris, ça permet de déclarer deux fonctions portant le même nom avec les mêmes arguments dans deux .cpp différents sans que ça pose problème au link?
    oui.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  8. #188
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Formellement, écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    namespace {
      // Code
    }
    Est équivalent à écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    namespace ipgvjnisepgqgvnerhfgev { // Identifiant unique généré par le compilo
      // Code
    }
    using namespace ipgvjnisepgqgvnerhfgev;
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  9. #189
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    question sur le typedef, c'est du C ou du C++??
    d'aprés ce post http://www.developpez.net/forums/sho...d.php?t=402693
    c'est du C.
    DU coup comment faire cela en C++ :
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    template <class T> 
    class A
    {
    .
    .
    .
    }
     
     
    typedef A<char> A_CHAR
    typedef A<int> A_INT

  10. #190
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Ca fait partie de ce fameux "sous ensemble"...

    En fait, en C, le fait de déclarer une structure ne déclare pas un type correspondant pour la cause...ce qui n'est pas le cas en C++.

    Mais il est parfaitement légal de déclarer typedef afin de permettre, par exemple, une écriture plus simple et plus "parlante"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    typedef struct mastruct
    {
        /*..*/
    } montype;
    est typiquement C, alors que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    typedef std::vector<std::string> StringArray;
    sera typiquement C++
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  11. #191
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par koala01 Voir le message
    Ca fait partie de ce fameux "sous ensemble"...

    En fait, en C, le fait de déclarer une structure ne déclare pas un type correspondant pour la cause...ce qui n'est pas le cas en C++.

    Mais il est parfaitement légal de déclarer typedef afin de permettre, par exemple, une écriture plus simple et plus "parlante"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    typedef struct mastruct
    {
        /*..*/
    } montype;
    est typiquement C, alors que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    typedef std::vector<std::string> StringArray;
    sera typiquement C++
    ça me rassure. merci
    Comme quoi ce n'est pas si évidente de séparer ce qui est du C de ce qui est du C++

  12. #192
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Bonjour,
    ce code en C++

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if (test1() ||test2())
    {
    .
    .
    .
    }
    va exécuter en premier test1() et :
    - si vrai : ne va pas appeler test2
    - si faux : va appeler test2

    Je voulais juste savoir si c'est bien la même chose en C.

    De même
    as un comportement indefinie en C++. Es bien pareil en C?
    Merci

  13. #193
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Le problème du || est la table de vérité qu'il implique en algèbre de bool:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    a    b    a||b    a&&b
    0    0      0       0
    1    0      1       0
    0    1      1       0
    1    1      1       1
    Je ne suis pas sur qu'il y ai quoi que ce soit qui permette d'assurer que la première expression est testée avant la deuxième (aux connaisseurs de la norme: qu'en dit elle )

    Ce qui est sur, c'est que, si la première expression testée donne un vrai, il n'y a aucune raison d'aller voir plus loin pour un OU (étant donné que la deuxième expression n'a aucune espèce d'importance: le résultat est VRAI d'office ), et que, si la première expression testée donne un faux, on sera tout aussi sur du résultat avec un ET (étant donné que le résultat de la deuxième expression n'a aucune importance: le résultat est FAUX d'office )

    Par contre, les choses changent si la première expression testée est fausse dans le cadre un OU, ou vraie dans le cadre d'un ET...

    Pour être en mesure de fournir un résultat, il nous faut... tester la deuxième expression, dont dépendra le résultat final
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  14. #194
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Normalement, pour le ou et le et logique, la première expression est testée. Si elle vaut vraie pour le ou, le test s'arrête, de même si elle vaut faux pour le et logique.
    En revanche, je ne suis pas sûr que la norme indique laquelle des deux fonctions est exécutée en premier ou si le secodne est exécutée si le test doit s'arrêter.
    Enfin, pour , rien n'indique quelle expression est calculée en premier. D'ailleurs ICC donne un warning pour ce genre de chose, et ça devient lourd parfois

  15. #195
    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 Miles Voir le message
    Normalement, pour le ou et le et logique, la première expression est testée. Si elle vaut vraie pour le ou, le test s'arrête, de même si elle vaut faux pour le et logique.
    En revanche, je ne suis pas sûr que la norme indique laquelle des deux fonctions est exécutée en premier ou si le secodne est exécutée si le test doit s'arrêter.
    Oui, c'est garanti.

    Enfin, pour , rien n'indique quelle expression est calculée en premier. D'ailleurs ICC donne un warning pour ce genre de chose, et ça devient lourd parfois
    Non seulement l'ordre d'evaluation n'est pas specifie (ce qui restreintrait les reponses possibles mais forcerait l'implementation a un choix limite de comportement) mais le comportement est indefini en C comme en C++ (donc l'implementation peut reellement faire n'importe quoi).
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  16. #196
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation:
    Envoyé par Miles Voir le message
    Normalement, pour le ou et le et logique, la première expression est testée. Si elle vaut vraie pour le ou, le test s'arrête, de même si elle vaut faux pour le et logique.
    En revanche, je ne suis pas sûr que la norme indique laquelle des deux fonctions est exécutée en premier ou si le secodne est exécutée si le test doit s'arrêter.
    Oui, c'est garanti.
    Ouf, j'ai eu peur. J'utilise beaucoup cette propriété dans mes code..
    D'ailleur, es ce plustôt du C ou du C++.

  17. #197
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Citation Envoyé par Mongaulois Voir le message
    Ouf, j'ai eu peur. J'utilise beaucoup cette propriété dans mes code..
    Comme sans doute tout le monde (qui n'a jamais du faire un test sur plusieurs conditions distinctes )

    Le fait était surtout de savoir ce qu'en pense la norme, et là, il n'y a pas beaucoup de monde par ici qui puisse se targuer de la connaître "à fond" (ou ne serait-ce que de manière suffisante ))
    D'ailleur, es ce plustôt du C ou du C++.
    C'est de l'algèbre de Bool... Tout simplement ...

    Et par conséquent, ce n'est pas relié à un langage particulier
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  18. #198
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par koala01 Voir le message
    C'est de l'algèbre de Bool... Tout simplement ...

    Et par conséquent, ce n'est pas relié à un langage particulier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (A() || B()) {...}

    Rien n'oblige à ce que A soit appeler avant B, sauf le compilateur ou le langage

  19. #199
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Excuses moi, je partais sur une mauvaise interprétation de ta question...

    J'étais parti sur une question plus du genre de "les ET logiques et les OU logiques, il sont plus C ou plus C++ "

    Mais dans l'ensemble, ma réponse reste valable, car un test sur expressions multiples reste tout à fait soumis à l'algèbre de Bool dans le sens ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if ( fonctiona()  || fonctionb()   &&  fonctionc())
             ^                  ^               ^
             |                  |               |
          vrai/faux   OU   vrai/faux   ET     vrai/faux
             A        OU      B        ET       C
    se réduit réellement à l'algèbre de Bool, avec les règles de priorités qui en découlent et qui sont:

    D'abord le ET logique (B && C), et on met le résultat en balance avec OU A
    ce qui donne une table de vérité de l'ordre de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
                BC      
    B  C  |   B&&C   A  |  BC+A
    0  0  |     0    0  |    0
    0  1  |     0    0  |    0
    1  0  |     0    0  |    0
    1  1  |     1    0  |    1
    0  0  |     0    1  |    1
    0  1  |     0    1  |    1
    1  0  |     0    1  |    1
    1  1  |     1    1  |    1
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  20. #200
    screetch
    Invité(e)
    Par défaut
    je pense qu'il manque toujours l'info importante!!

    supposons que functiona, functionb et functionc aient des effets de bords, alors

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if(functiona() || functionb() && functionc())
    D'abord functionb() est appelé, si elle renvoie false alors functiona(9 est appelé. Quel que soit le resultat, functionc() n'est pas appelé et son effet de bord non executé!

    ca s'appelle la "lazy evaluation", ca doit pas etre le terme technique mais en tous cas ca parle mieux comme ca : a partir du moment ou tu peux deduire le resultat tu ne lances pas l'evaluation de la suite.

+ Répondre à la discussion
Cette discussion est résolue.
Page 10 sur 18 PremièrePremière ... 67891011121314 ... DernièreDernière

Discussions similaires

  1. Mythes & Réalité
    Par philben dans le forum Contribuez
    Réponses: 6
    Dernier message: 07/07/2006, 07h05
  2. [TV] Emission Télé Réalité(encore)
    Par ArHacKnIdE dans le forum Films & TV
    Réponses: 30
    Dernier message: 31/05/2006, 11h47
  3. Liste deroulante et VALUE non conforme a la realité
    Par ahage4x4 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 27/05/2005, 13h33
  4. Réponses: 2
    Dernier message: 05/10/2004, 22h43

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