Hello,

 A lot of people (me too) write this kind of code:

 struct param1_str *param1;
 struct param2_str *param2;
 struct param3_str *param3;

 error = treat_alpha (param1, param2, param3);
 if (error)
    printf ("treat_alpha failed error %d, param1 = %p, "
            "param2 = %p, param3 = %p",
             error, param1, param2, param3);
 error = treat_beta (param1, param2, param3);
 if (error)
    printf ("treat_beta failed error %d, param1 = %p, "
            "param2 = %p, param3 = %p",
             error, param1, param2, param3);

 The printf() is only there for debug purposes, sometimes
it is msglog() or even sprintf().

 This construct cannot be optimised efficiently by the
compiler because the variable list of parameters of
printf() is not typed - so no "const" attribute, and even
a simple:
  printf ("error %d\n", error);
need to flush every registers to memory before the call and
reload everything after the call.

 It WouldBeNice to be able to prototype printf like:
int printf (const char *, const ...);
 and sprintf like:
int sprintf (char *, const char *, const ...);
 to at least reduce the number of reloads from memory
 to registers - because main memory will not changed
 when passing random type pointers, just displayed.

 I tried __attribute__ ((const)) but the effect is not
equivalent because when the return value is ignored the
call is removed.

 Just a WouldBeNice mail before Xmas... not even a patch.
 Etienne.



        

        
                
___________________________________________________________________________ 
Nouveau : téléphonez moins cher avec Yahoo! Messenger ! Découvez les tarifs 
exceptionnels pour appeler la France et l'international.
Téléchargez sur http://fr.messenger.yahoo.com

Reply via email to