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

Langage C++ Discussion :

Option du compilateur pour signaler ce qui ne correspondent pas au C++ moderne


Sujet :

Langage C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2009
    Messages : 16
    Par défaut Option du compilateur pour signaler ce qui ne correspondent pas au C++ moderne
    Bonjour,

    Y a-t-il un moyen de demander au compilateur de signaler les syntaxes anciennes qui ne correspondent pas au C++ moderne ?

    Par exemple envoyer un warning si le code contient du vieux C++ d’avant C++98

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    std::empty(maChaine)
    empty(maChaine);
    Plutôt que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    std::string::empty()
    maChaine.empty()
    J'ai essayé g++ -Wall -std=gnu++23 :

    mais il ne dit rien avec :

    Merci d'avance.

    --
    Benoît

  2. #2
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 994
    Par défaut
    Hello,

    Il n’y a pas d’option de compilation directe avec GCC ou Clang pour signaler cette forme jugée « non moderne ».
    Si vous voulez vraiment une alerte, il faudra passer par un outil externe (clang-tidy) ou adapter un script de vérification personnalisée (grep, par exemple) pour détecter ces appels et les signaler.

    Par contre,

    std::empty() est même plus récent (introduit en C++17) que la méthode membre empty(), ce qui le rend encore moins susceptible d’être traité comme « ancien code » ou code deprecated.
    Il n’y a donc à mon sens, pas de raison, du point de vue du standard, d’émettre un warning.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  3. #3
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Salut,

    Les options -Wold-style-cast et -Weffc++ peut servir à améliorer un peu les choses.(mais pas dans ce cas précis).

    Personnellement, je compile en général en -Wall -Wextra -Weffc++ et j'ajoute -Wold-style-cast pour les codes que je modernise.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  4. #4
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    749
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 749
    Par défaut
    Le compilateur ne propose quasiment rien pour la "modernisation" du code, au mieux des options sur des manques ou pratiques à risque comblés par des mots clef dans les normes suivantes.

    - -Wsuggest-override qui demande de mettre override sur les surcharges de fonctions virtuelles.
    - -Wzero-as-null-pointer-constant pour ne pas utiliser la valeur 0 avec des pointeurs.

    Mais clang-tidy contient plein de check dont des modernize-* avec possibilité de les corriger automatiquement. Par contre, il faut savoir faire le tri et désactiver les avertissements sur certaines lignes lorsque cela est nécessaire (ce n'est pas parce qu'une vérification est pertinente dans le cas général qu'elle l'est tout le temps). Perso j'active tout avec checkers='*' et puis regarde au cas par cas ceux à enlever.

Discussions similaires

  1. Réponses: 9
    Dernier message: 13/07/2007, 12h03
  2. Réponses: 8
    Dernier message: 18/01/2007, 22h01
  3. lien pour une table qui ne doit pas etre public
    Par raslain dans le forum Oracle
    Réponses: 1
    Dernier message: 12/12/2005, 14h40
  4. Utlisation d'image pour les <li> qui ne marche pas
    Par Death83 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 05/11/2005, 18h37

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