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 :

time_t : signé ou pas forcément ?


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 613
    Points : 406
    Points
    406
    Par défaut time_t : signé ou pas forcément ?
    Bonjour,

    Je voudrais avoir votre avis sur cette question :
    Est ce qu'on peut supposer time_t signé ?
    Si la réponse est non, comment traiter une différence entre deux time_t. Car j'ai une fonction qui va me renvoyer cette différence, dans un time_t. Mais si la différence est négative je n'aurai pas l'assurance d'avoir le résultat attendu si je ne sais pas si time_t est signé ?

  2. #2
    Membre expérimenté Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Points : 1 544
    Points
    1 544
    Par défaut
    Bonjour,

    il semblerait que ce soit signé car dans le man de time() si il y a erreur on retourne "(time_t)-1"
    "vaste programme"

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 613
    Points : 406
    Points
    406
    Par défaut
    Mais est ce une garantie ?
    Car si time_t est non signé on peut quand meme connaitre la valeur de (time_t) -1 qui est égal au max de time_t
    C'est d'ailleurs pour ça que -1 est casté en (time_t) sinon ce serait inutile.

  4. #4
    Membre expérimenté Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Points : 1 544
    Points
    1 544
    Par défaut
    en regardant mon types.h de HP-UX j ai ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    _NAMESPACE_STD_START
    #if defined(_INCLUDE_POSIX_SOURCE) || defined(_INCLUDE__STDC__)
    #  ifndef _TIME_T
    #    define _TIME_T
    #       ifdef _KERNEL
                    typedef int32_t time_t;
    #       else
                    typedef long time_t;
    #       endif
    #  endif /* _TIME_T */
    #endif /* _INCLUDE_POSIX_SOURCE || _INCLUDE__STDC__ */
    "vaste programme"

  5. #5
    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 pasdeface Voir le message
    Est ce qu'on peut supposer time_t signé ?
    C'est un type arithmetique, on ne sait pas s'il est entier ou non, ni s'il est signe dans le premier cas.

    Si la réponse est non, comment traiter une différence entre deux time_t.
    Il y a une fonction difftime dans <time.h> qui retourne un double, difference de deux time_t exprimee en seconde.

    Citation Envoyé par BainE Voir le message
    il semblerait que ce soit signé car dans le man de time() si il y a erreur on retourne "(time_t)-1"
    Et? (unsigned) -1 est parfaitement bien defini et vaut UINT_MAX.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  6. #6
    Membre expérimenté Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Points : 1 544
    Points
    1 544
    Par défaut
    oui mais c est pas terrible,
    pour pas dire franchement sale.

    J ai pense que ce genre de bidouille n etait pas permise sous norme POSIX, SVID, BSD,...
    "vaste programme"

  7. #7
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par pasdeface Voir le message
    Bonjour,

    Je voudrais avoir votre avis sur cette question :
    Est ce qu'on peut supposer time_t signé ?
    Si la réponse est non, comment traiter une différence entre deux time_t. Car j'ai une fonction qui va me renvoyer cette différence, dans un time_t. Mais si la différence est négative je n'aurai pas l'assurance d'avoir le résultat attendu si je ne sais pas si time_t est signé ?
    La norme ne le précise pas. Elle ne fdit même pas si c'est un entier ou un réel.
    Ne faire aucune hypothèse.
    Citation Envoyé par WG14/N1256 Committee Draft — Septermber 7, 2007 ISO/IEC 9899:TC3
    7.23 Date and time <time.h>
    7.23.1 Components of time
    1 The header <time.h> defines two macros, and declares several types and functions for
    manipulating time. Many functions deal with a calendar time that represents the current
    date (according to the Gregorian calendar) and time. Some functions deal with local
    time, which is the calendar time expressed for some specific time zone, and with Daylight
    <...>
    3 The types declared are size_t (described in 7.17);
    clock_t
    and
    time_t
    which are arithmetic types capable of representing times; <...>
    4 The range and precision of times representable in clock_t and time_t are
    implementation-defined.<...>

    <...>

    J.3 Implementation-defined behavior
    <...>
    — The range and precision of times representable in clock_t and time_t (7.23).
    Pas de Wi-Fi à la maison : CPL

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

Discussions similaires

  1. un octet ne fait pas forcément 8 bits ?
    Par ikuzar dans le forum Débuter
    Réponses: 8
    Dernier message: 17/01/2013, 17h54
  2. Chemins de code de retournant pas forcément une valeur
    Par Tanoak_LaCapuche dans le forum C#
    Réponses: 3
    Dernier message: 12/07/2012, 15h44
  3. Typage fort ne marche pas forcément sur un bouton ?
    Par bouchette63 dans le forum Flash
    Réponses: 4
    Dernier message: 15/09/2006, 11h43

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