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 :

Code unreachable, pourquoi ?


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut Code unreachable, pourquoi ?
    Bonjour,

    dans ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    int a;
    try
    {
    	a = 12;
    }
    catch(...)
    {
    	assert(false); // warning compilateur ici
    }
    J'ai un warning du compilateur qui me dit :
    warning C4702: impossible d'atteindre le code
    Le warning est sur la ligne de l'assert et je ne comprends pas pourquoi.
    Bon, là, c'est un code minimal mais normallement dans le bloc try, il y a plein de choses.

    Mon environnement de développement,
    Visual Studio 2005 SP1 sur XP pro SP3, tout le monde est à jour des mises à jour.

    Je compile une DLL,
    la ligne de commande du compilateur est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_USRDLL" /D "WINLOG_EXPORTS" /D "_WINDLL" /D "_UNICODE" /D "UNICODE" /Gm /EHsc /RTC1 /MDd /Fo"Debug\\" /Fd"Debug\vc80.pdb" /W4 /nologo /c /Wp64 /ZI /TP /errorReport:prompt
    La ligne de commande du linker est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /OUT:"D:\Raymond\Developpement\WinLog\Debug\WinLog.dll" /INCREMENTAL /NOLOGO /DLL /MANIFEST /MANIFESTFILE:"Debug\WinLog.dll.intermediate.manifest" /DEBUG /PDB:"d:\Raymond\Developpement\WinLog\Debug\WinLog.pdb" /SUBSYSTEM:WINDOWS /MACHINE:X86 /ERRORREPORT:PROMPT kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib
    Si vous avez des idées, je suis preneur
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  2. #2
    Membre chevronné
    Avatar de Florian Goo
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    680
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 680
    Par défaut
    Je suppose que tu as le même warning avec un code moins trivial qu'une affectation à un int, sinon tu ne poserais pas la question, n'est-ce pas ?
    Cours : Initiation à CMake
    Projet : Scalpel, bibliothèque d'analyse de code source C++ (développement en cours)
    Ce message a été tapé avec un clavier en disposition bépo.

  3. #3
    Alp
    Alp est déconnecté
    Expert confirmé

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Ca se comprendrait que ce ne soit pas le cas, car a = 12 quand a est de type int ne lèvera jamais d'exception.

    Mais ça me semble bizarre que le compilo regarde si le code lèvera effectivement une exception ou non...

  4. #4
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Citation Envoyé par Florian Goo Voir le message
    Je suppose que tu as le même warning avec un code moins trivial qu'une affectation à un int, sinon tu ne poserais pas la question, n'est-ce pas ?
    Yes sir !!
    Le code dans le bloc try est un tout petit peu plus complexe, j'ai simplifié
    En fait, dans le bloc try, il y a des sprintf et des manipulation de chaines de caractères
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  5. #5
    Alp
    Alp est déconnecté
    Expert confirmé

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Tu peux nous le donner, car il semble que ce soit le contenu du try qui pose problème, bien que je n'en sois pas sûr.

  6. #6
    Alp
    Alp est déconnecté
    Expert confirmé

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    http://bytes.com/groups/c/484825-unreachable-code
    pourrait éventuellement aider.

  7. #7
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Ce code reproduit le warning
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    int a = 12;
    int b = 0;
    try
    {
    	a = a / b;
    }
    catch(...)
    {
    	assert(false);
    }
    Avec le débugger, j'ai effectivement une exception qui est levée mais je ne passe pas dans le bloc catch

    Est ce qu'il est possible que la déclaration/définition de la fonction y soit pour quelque chose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #ifdef  __cplusplus
    extern "C" {
    #endif
    __cdecl int WinLogW(const int Event, const int FeatureLevel, const wchar_t * Format, ...);
    #ifdef  __cplusplus
    }
    #endif
    Le fait que cela soit une fonction "C" avec __cdecl

    Petit rappel, je compile une DLL
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  8. #8
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Citation Envoyé par Alp Voir le message
    Bonne réponse Alp, c'est cela
    I would assume that "C" functions must not throw, so any function is not expected to throw and code is not prepared to catch the exception raised by a "C"-function (->unreachable code)
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  9. #9
    Membre chevronné
    Avatar de Florian Goo
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    680
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 680
    Par défaut
    Hélas, je ne peux pas reproduire avec GCC

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #include <cassert>
     
    int main()
    {
    	int a;
    	try
    	{
    		a = 12;
    	}
    	catch(...)
    	{
    		assert(false); // warning compilateur ici
    	}
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    g++ main.cpp -W -Wall -pedantic
    Cours : Initiation à CMake
    Projet : Scalpel, bibliothèque d'analyse de code source C++ (développement en cours)
    Ce message a été tapé avec un clavier en disposition bépo.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 31/07/2006, 08h48
  2. Réponses: 1
    Dernier message: 09/07/2006, 23h39
  3. Réponses: 4
    Dernier message: 10/04/2006, 14h23
  4. que fait ce code (et surtout pourquoi??)
    Par elekis dans le forum C++
    Réponses: 3
    Dernier message: 13/09/2005, 10h47
  5. Pourquoi ce code marche pas sous FF?
    Par Death83 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 09/09/2005, 10h04

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