détails en C

Philippe49Philippe49 Membre
20:55 modifié dans API AppKit #1
A l'essai, je confirme les deux affirmations ci-dessous.
Voyez-vous des vices cachés ?

Affirmation 1
Pour écrire un CGFloat, on peut utiliser %f puisque CGFloat= float ou double.

Affirmation 2
La macro suivante marche,
#define LOGRECT(rect) (fprintf(stderr,#rect),fprintf(stderr," : origin=(%.2f , %.2f) , size=(%.2f , %.2f)\n",rect.origin.x,rect.origin.y,rect.size.width,rect.size.height))

exemple
CGRect rect=CGRectMake(10.,20.,50.,100.);
LOGRECT(rect);
fournit le message :
rect : origin=(10.00 , 20.00) , size=(50.00 , 100.00)

Réponses

  • décembre 2007 modifié #2
    Pourquoi ne pas faire une macro pour NSLog(NSStringFromRect(NSRectFromCGRect(rect))); ou un truc dans le genre ???
  • Philippe49Philippe49 Membre
    20:55 modifié #3
    dans 1199006067:

    Pourquoi ne pas faire une macro pour NSLog(NSStringFromRect(NSRectFromCGRect(rect))); ou un truc dans le genre ???


    Pour ceux qui préfèrent, cela donne :
    2007-12-30 10:41:06.342 CALayer 03[784:10b] {{0, 0}, {235, 239}}

    et la macro
    #define LOGCGRECT(rect) NSLog(NSStringFromRect(NSRectFromCGRect(rect)))
  • 20:55 modifié #4
    dans 1199005058:
    Affirmation 1
    Pour écrire un CGFloat, on peut utiliser %f puisque CGFloat= float ou double.

    La confirmation par la doc (avec en plus des détails pour les NSInteger et autres nouveaux types)
  • Philippe49Philippe49 Membre
    20:55 modifié #5
    dans 1199012794:

    La confirmation par la doc (avec en plus des détails pour les NSInteger et autres nouveaux types)


    Merci Renaud  ::)
  • Philippe49Philippe49 Membre
    20:55 modifié #6
    Euh Renaud si t'est encore dans le coin ...

    Dans un exemple de la doc Apple, il est mis  CGColorCreateGenericRGB(0.0f, 0.0f, 0.8f, 0.2f); 

    Le suffixe f signifie à  priori qu'il faut considérer les constantes comme des CGFloat.

    Affirmation 3
    mais si on ne met pas le suffixe f , cela marche aussi bien : Même si c'était des "vieux" double, la règle du cast automatique reste vraie dans ce genre de situation.
  • 20:55 modifié #7
    Pourquoi la règle du cast auto ne marcherait pas dans ce genre de situation? Je ne comprends pas trop la question en fait.

    Quand on dit "un CGFloat est un float sur un 32bit et un double sur un 64", c'est un peu un raccourci: la version complète serait plutôt: "un CGFloat est défini comme un float lorsqu'on compile pour un 32 bit, et un double lorsqu'on compile pour un 64". Donc pour une appli compilé pour 32bit qui tourne sur un 64bit, le CGFloat sera un float.

    Tout ce se passe donc avant la compil, donc il n'y a aucune raison que les règles de cast auto "s'invalident".
  • Philippe49Philippe49 Membre
    20:55 modifié #8
    dans 1199036360:

    Pourquoi la règle du cast auto ne marcherait pas dans ce genre de situation? Je ne comprends pas trop la question en fait.


    C'est bien cela la question (ou l'absence de question ?)
    C'est mon avis aussi, mais le voyant dans la doc Apple, je m'interrogeais sans plus.

    Sans doute une question de style de programmation : on voit tellement de casts inutiles dans les codes qui traà®nent de-ci de-là  que cela peut faire douter.

Connectez-vous ou Inscrivez-vous pour répondre.