détails en C
Philippe49
Membre
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)
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)
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
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)))
La confirmation par la doc (avec en plus des détails pour les NSInteger et autres nouveaux types)
Merci Renaud ::)
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.
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".
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.