Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1524 connectés 

  FORUM HardWare.fr
  Programmation
  C

  affichage pourcents déja calculé ???

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

affichage pourcents déja calculé ???

n°1296201
in_your_ph​ion
Posté le 01-02-2006 à 11:22:24  profilanswer
 

bonjour,
 
je fais un petit programme en C qui m'affche le pourcentage déja calculé dans une boucle, c'est un truc du genre :
 

Code :
  1. for (i=0;i<taille_y;i++) {
  2.   for (j=0;j<taille_x;j++) {
  3. // ... blablabla
  4.   }
  5. fprintf(stderr,"%d%%\r",(int)floor( ((float)i/taille_y)*100));
  6. }


 
le truc que je comprend pas c'est que ca me l'affiche bien dans mon xterm si je fais un fprintf sur le stderr comme dans l'exemple, mais plus si je le fais sur le stdout !  :??:  ...qqu'un saurait-il pourquoi ???
 
merci par avance  [:arg]

mood
Publicité
Posté le 01-02-2006 à 11:22:24  profilanswer
 

n°1296203
chrisbk
-
Posté le 01-02-2006 à 11:26:03  profilanswer
 

ptet une bete histoire de flush ?

n°1296206
skelter
Posté le 01-02-2006 à 11:29:44  profilanswer
 

+1, c'est logique stderr n'est pas bufferisé (comme il se doit)

n°1296211
Emmanuel D​elahaye
C is a sharp tool
Posté le 01-02-2006 à 11:33:59  profilanswer
 

in_your_phion a écrit :

le truc que je comprend pas c'est que ca me l'affiche bien dans mon xterm si je fais un fprintf sur le stderr comme dans l'exemple, mais plus si je le fais sur le stdout !  :??:  ...qqu'un saurait-il pourquoi ???


http://mapage.noos.fr/emdel/notes.htm#fflush_stdout


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1296214
chrisbk
-
Posté le 01-02-2006 à 11:36:59  profilanswer
 


Citation :


 Il y a trois critères qui déclenchent l'émission réelle des caractères :
 
    * Un '\n' a été placé dans le tampon


 
sauf en cas de redirection dudit flux vers un fichier [:klem3i1]

n°1296216
chrisbk
-
Posté le 01-02-2006 à 11:38:34  profilanswer
 

heuh ..

Citation :


 Il est possible cependant de réduire la portée de la fonction à l'unité de compilation dans laquelle elle a été définie, en ajoutant le qualificateur static.[..] Certains compilateurs sont capables d'"inliner" une telle fonction dans certaines conditions, ce qui diminue le temps d'exécution au prix d'une augmentation de la taille (le code de la fonction est recopié autant de fois que nécessaire).


 
l'inlining n'a rien a voir avec la presence ou non de static [:le kneu] Bcp de compilo on besoin d'avoir le code de la fonction (et donc pas que sa declaration) sous la main au moment de la compilation pour faire l'inline, mais static n'y change rien

Message cité 2 fois
Message édité par chrisbk le 01-02-2006 à 11:39:29
n°1296221
Emmanuel D​elahaye
C is a sharp tool
Posté le 01-02-2006 à 11:41:45  profilanswer
 

chrisbk a écrit :

Citation :


 Il y a trois critères qui déclenchent l'émission réelle des caractères :
 
    * Un '\n' a été placé dans le tampon


 
sauf en cas de redirection dudit flux vers un fichier [:klem3i1]


Ok, je vais le préciser.
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1296224
skelter
Posté le 01-02-2006 à 11:43:36  profilanswer
 

chrisbk a écrit :

heuh ..

Citation :


 Il est possible cependant de réduire la portée de la fonction à l'unité de compilation dans laquelle elle a été définie, en ajoutant le qualificateur static.[..] Certains compilateurs sont capables d'"inliner" une telle fonction dans certaines conditions, ce qui diminue le temps d'exécution au prix d'une augmentation de la taille (le code de la fonction est recopié autant de fois que nécessaire).


 
l'inlining n'a rien a voir avec la presence ou non de static [:le kneu] Bcp de compilo on besoin d'avoir le code de la fonction (et donc pas que sa declaration) sous la main au moment de la compilation pour faire l'inline, mais static n'y change rien


 
c'est ce que j'avais dit dans l'autre topic, static peut juste permetre au compilo de ne pas garder le code de la fonction

Message cité 1 fois
Message édité par skelter le 01-02-2006 à 11:44:24
n°1296233
chrisbk
-
Posté le 01-02-2006 à 11:47:22  profilanswer
 

skelter a écrit :

c'est ce que j'avais dit dans l'autre topic, static peut juste permetre au compilo de ne pas garder le code de la fonction


 
oué. Ce qui n'est pas une grande optimisation vu qu'un linker intelligent  n'inserera pas les fonctions non utilisée dans l'exe final

Message cité 1 fois
Message édité par chrisbk le 01-02-2006 à 11:47:36
n°1296243
skelter
Posté le 01-02-2006 à 11:51:30  profilanswer
 

chrisbk a écrit :

oué. Ce qui n'est pas une grande optimisation vu qu'un linker intelligent  n'inserera pas les fonctions non utilisée dans l'exe final


 
oui mais ca, ca ne concernerais pas uniquement les symboles externes ??

Message cité 1 fois
Message édité par skelter le 01-02-2006 à 11:51:50
mood
Publicité
Posté le 01-02-2006 à 11:51:30  profilanswer
 

n°1296245
chrisbk
-
Posté le 01-02-2006 à 11:52:28  profilanswer
 

skelter a écrit :

oui mais ca, ca ne concernerais pas uniquement les symboles externes ??


 
What ? jcrois on se comprends pas trotro bien la :d

n°1296251
skelter
Posté le 01-02-2006 à 12:00:07  profilanswer
 

tu dis que le linker sait faire ce genre de tri (inserer une fonction seulement si elle est appelé) mais ca ne serais pas logique qu'il fasse de meme avec une fonction 'static', c'est le travail du compilateur, c'est lui qui sait ce qui se passe dans une unité de traduction
 
edit: de plus ca explique ce comportement (de gcc du moin, les autres compilo je ne sais pas)


Message édité par skelter le 01-02-2006 à 12:00:54
n°1296254
chrisbk
-
Posté le 01-02-2006 à 12:01:29  profilanswer
 

heuh ... [:petrus75] par inserer, tu entends quoi ? faire l'inlining ou inserer le code de la fonction dans l'exe / dll final ?

n°1296258
skelter
Posté le 01-02-2006 à 12:04:33  profilanswer
 

inserer le code dans l'exe

n°1296260
Emmanuel D​elahaye
C is a sharp tool
Posté le 01-02-2006 à 12:06:10  profilanswer
 

chrisbk a écrit :

heuh ..

Citation :


 Il est possible cependant de réduire la portée de la fonction à l'unité de compilation dans laquelle elle a été définie, en ajoutant le qualificateur static.[..] Certains compilateurs sont capables d'"inliner" une telle fonction dans certaines conditions, ce qui diminue le temps d'exécution au prix d'une augmentation de la taille (le code de la fonction est recopié autant de fois que nécessaire).


 
l'inlining n'a rien a voir avec la presence ou non de static [:le kneu] Bcp de compilo on besoin d'avoir le code de la fonction (et donc pas que sa declaration) sous la main au moment de la compilation pour faire l'inline, mais static n'y change rien


Mmmm...  
 
Une fonction non static (donc exportable aka with external linkage) ne peut pas être 'inlinée', car comme elle peut être appelée de l'extérieur, elle doit avoir un point d'entrée et donc un point de sortie, ce que n'ont pas les fonctions 'inlinées'.  
 
Par contre, toutes les fonctions 'static' ne peuvent pas être 'inlinées', notamment si on a besoin de leur addresse pour un callback ou tout autre appel via un pointeur de fonction...


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1296262
chrisbk
-
Posté le 01-02-2006 à 12:06:22  profilanswer
 

bah ca me parait quand meme assez etre le boulot du linker, c'est le seul a avoir une vision a peu pres globale du progamme (le compilo n'en a qu'une vision partielle, nommément une par unité de compilation)
 
Le linker connait tous les symboles presents, le(s) point(s) d'entrée. Si en plus il connait quels symboles en utilise quel autre (genre la fonction A utilise les fonctions C et B) alors il peut en déduire les symboles utilisés dans le programme et laisser de coté les autres
 

n°1296266
chrisbk
-
Posté le 01-02-2006 à 12:07:57  profilanswer
 

Emmanuel Delahaye a écrit :

Mmmm...  
 
Une fonction non static (donc exportable aka with external linkage) ne peut pas être 'inlinée', car comme elle peut être appelée de l'extérieur, elle doit avoir un point d'entrée et donc un point de sortie, ce que n'ont pas les fonctions 'inlinées'.  


 
Je vois ton point, mais pourquoi ne pas l'inliner la ou elle peut l'etre et en garder une copie "normale" pour les autres cas ? Une fois de plus, le linker pourra degager cette derniere copie si jamais elle n'est jamais appelé

Message cité 2 fois
Message édité par chrisbk le 01-02-2006 à 12:08:32
n°1296267
skelter
Posté le 01-02-2006 à 12:08:16  profilanswer
 

c'est vrai, en fait c'est juste que le compilateur peut égalment faire ce boulot pour une fonction static mais si tu dis que de toute facon le linker peut le faire et le fait...

n°1296268
chrisbk
-
Posté le 01-02-2006 à 12:09:19  profilanswer
 

skelter a écrit :

c'est vrai, en fait c'est juste que le compilateur peut égalment faire ce boulot pour une fonction static mais si tu dis que de toute facon le linker peut le faire et le fait...


 
Ouaip. D'ailleurs gcc te previens quand tu fais défini un symbole statique sans l'utiliser

n°1296269
skelter
Posté le 01-02-2006 à 12:09:52  profilanswer
 

chrisbk a écrit :

Je vois ton point, mais pourquoi ne pas l'inliner la ou elle peut l'etre et en garder une copie "normale" pour les autres cas ? Une fois de plus, le linker pourra degager cette derniere copie si jamais elle n'est jamais appelé


 
+1, c'est ce que fais gcc et c'est bien préciser dans la doc, il gardera le code si la fonction est non static

n°1296275
Emmanuel D​elahaye
C is a sharp tool
Posté le 01-02-2006 à 12:19:56  profilanswer
 

chrisbk a écrit :

Je vois ton point, mais pourquoi ne pas l'inliner la ou elle peut l'etre et en garder une copie "normale" pour les autres cas ? Une fois de plus, le linker pourra degager cette derniere copie si jamais elle n'est jamais appelé


Peut être, ça fait un peu usine à gaz, mais les compilateurs sont libres de faire ce qu'ils veulent... du moment que le comportement est conforme...


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1296276
chrisbk
-
Posté le 01-02-2006 à 12:24:00  profilanswer
 

Usine a gaz, pas tant que ca, apres tout le principe d'inlining c'est bien la recopie de code de fonctions en plusieurs endroits, donc ca reste de toute facon coherent.  
 
d'ailleurs
 

Code :
  1. static int inutile()
  2. {
  3. return 20;
  4. }


 
sera (j'espere=) inliné par un compilo, mais il aura besoin d'une copie si jamais on ecrit :
 
 

Code :
  1. int (*machin )() = inutile;


 
donc bon

n°1296282
in_your_ph​ion
Posté le 01-02-2006 à 12:28:00  profilanswer
 

chrisbk a écrit :

ptet une bete histoire de flush ?


 
 
ça marche avec le fllush  :)  Merci à tous, et pour les explications !  [:arg]  [:arg]  [:arg]


Message édité par in_your_phion le 01-02-2006 à 12:28:39
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  affichage pourcents déja calculé ???

 

Sujets relatifs
probleme affichage image[wxPython] Rafraichissement affichage
affichage seulement des doublonspb d'affichage
Problème de l'affichage d'images avec Internet base vitesseL'affichage d'une ligne cachée via css ne marche pas avec ie
[PHP/MYSQL] affichage d'une table sur une pageDifference d'affichage IE-Firefox
requête sql : pas d'affichageBesoin d'aide affichage variable flash
Plus de sujets relatifs à : affichage pourcents déja calculé ???


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR