C et C++ : y a un truc dont vous aimeriez parler ?

C et C++ : y a un truc dont vous aimeriez parler ? - Divers - Programmation

Marsh Posté le 31-01-2004 à 11:11:01    

pas des trucs du genre « je capte au rien pointeurs » quand même, mais si vous avez des petites idées dans la suite des petits papiers du C++. Allez ici, que ce soit en C (C99 :love:) ou C++
 [:taz]
 
 
À faire:
- streambuf: « ok, bah j'y réfléchirais, mais ça sera ètre progressif. je repartirais de la copie de fichier que j'ai montré y a quelques jours et je développerais un peu : on bricolera un petit istreambuf  sur le concept source-puit, genre un streambuf rot13 »


Message édité par Taz le 02-02-2004 à 15:55:40
Reply

Marsh Posté le 31-01-2004 à 11:11:01   

Reply

Marsh Posté le 31-01-2004 à 12:31:10    

Drapeau :D


---------------
Un matin je me lèverai et il fera beau.
Reply

Marsh Posté le 31-01-2004 à 12:42:37    

c koi POSIX ?

Reply

Marsh Posté le 31-01-2004 à 13:11:47    

y'a moyen de connaitre l'offset d'une variable membre a compile-time ? (genre toto  de "this + toto" )


Message édité par chrisbk le 31-01-2004 à 13:12:14
Reply

Marsh Posté le 31-01-2004 à 13:14:35    

alors en C++, ça pose des problèmes avec les fonctions membres en autre.
 
mais en C ou avec des banales structures, tu
 
offsetof dans <stddef.h> (c'est une macro triviale)
 
offsetof(struct meta_infos, author) qui retourne un size_t
je m'en suis servi dernièrement pour remplacer une longue série de  strcmp par un bsearch, ça marche très bien
 
 

Code :
  1. #include <cstddef>
  2. #include <iostream>
  3. struct Foo
  4. {
  5.   int i;
  6.   char s[5];
  7.   double d;
  8. };
  9. template<size_t OFFSET>
  10. inline void print()
  11. {
  12.   std::cout << OFFSET << '\n';
  13. }
  14. int main()
  15. {
  16.   print<offsetof(Foo, i)>();
  17.   print<offsetof(Foo, s)>();
  18.   print<offsetof(Foo, d)>();
  19.   Foo f;
  20.   * reinterpret_cast<int*>(&f + offsetof(Foo, i)) = 42;
  21.   std::cout << f.i << '\n';
  22. }


 
évidemment pour les fonctions, c'est interdit (mais supporté par certains compilateurs). -> pointeurs de fonctions membres, etc


Message édité par Taz le 31-01-2004 à 13:22:41
Reply

Marsh Posté le 31-01-2004 à 14:03:08    

les macros

Reply

Marsh Posté le 31-01-2004 à 14:06:17    

les macros on ne s'en sert que lorsqu'on a pas le choix évidemment.
 
perso, les dernières que j'ai faite, c'était en C ANSI (bordel de compatibilité gcc-2.95) et elle visait 1 choses : remplacer l'absence de template. sinon ça m'arrive souvent de m'en servir pour réduire la longueur de noms de fonction quand je bosse avec l'API C de python, les expressions deviennent trop longues ... :D
 
y a pas grand chose à savoir, si ce n'est qu'il vaut mieux écrire
 
#define GO(X) do{ /* ... */  } while(0)
 
que
 
#define GO(X) { /* ... */ }


Message édité par Taz le 31-01-2004 à 14:10:41
Reply

Marsh Posté le 31-01-2004 à 17:25:12    

les exceptions en c++, c'est beaucoup utilisé ?

Reply

Marsh Posté le 31-01-2004 à 17:26:03    

par les bons programmeurs, oui

Reply

Marsh Posté le 31-01-2004 à 17:51:02    

[citation=626912,1][nom]taz a écrit[/nom

Code :
  1. #include <cstddef>
  2. #include <iostream>
  3. template<size_t OFFSET>
  4. inline void print()
  5. {
  6.   std::cout << OFFSET << '\n';
  7. }


[/citation]Bon c'est peut-être con comme question, mais quel est exactement l'interet de faire ça sous forme de template plutot que d'une bête fonction ? C'est juste pour l'inlining ?

Reply

Marsh Posté le 31-01-2004 à 17:51:02   

Reply

Marsh Posté le 31-01-2004 à 18:30:12    

taz a écrit :

par les bons programmeurs, oui


 
 [:grinking]  
 
les autres ils se contente de renvoyer des faux booléens valant TRUE, FALSE, ou 2 (déjà vu :D)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 31-01-2004 à 18:47:41    

R3g a écrit :

Bon c'est peut-être con comme question, mais quel est exactement l'interet de faire ça sous forme de template plutot que d'une bête fonction ? C'est juste pour l'inlining ?

ça prouve que c'est établie au moment de la compilation pour les sceptiques, mais bon, j'aurais pu faire une enum


Message édité par Taz le 31-01-2004 à 18:47:58
Reply

Marsh Posté le 01-02-2004 à 10:38:27    

taz> t'as qua faire un joli topic cours sur les pointeurs [:dawa]
nan parce que c'est quand meme un probleme recurant
 
PS: si ce n'est pas déjà fait :o


Message édité par Mr yvele le 01-02-2004 à 10:38:45

---------------
yvele n'est plus.
Reply

Marsh Posté le 01-02-2004 à 12:10:12    

taz a écrit :

« je capte au rien pointeurs » [:taz]

[:quoted]

Reply

Marsh Posté le 01-02-2004 à 12:17:58    


 
T'utilises jamais le "quoted" comme nous [:figti]
 
nous on utilise ça pour souligner une connerie que quelqu'un dit, toi tu utilises ça pour mettre en évidence tes posts...


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 01-02-2004 à 12:23:29    

j'appelle ça une « rétro-citation »
 
toi aussi, le jeune, tu peux l'utiliser pour mettre en évidence un message déjà posté :)

Reply

Marsh Posté le 01-02-2004 à 13:19:03    

et puis d'ailleurs, estimez vous heureux que je ne réclame aucun droit à chaque fois que l'un d'entre vous utilise ce smiley :o


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 01-02-2004 à 13:19:41    

Mr yvele a écrit :

taz> t'as qua faire un joli topic cours sur les pointeurs [:dawa]


tu fais du C#, t'as pas besoin des pointeurs !


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 01-02-2004 à 13:39:06    

Harkonnen a écrit :


tu fais du C#, t'as pas besoin des pointeurs !


#define unsafe warrior

Reply

Marsh Posté le 01-02-2004 à 13:47:06    

Harkonnen a écrit :


tu fais du C#, t'as pas besoin des pointeurs !

t'as dû rater le topic sur les structures en C# toi.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 01-02-2004 à 14:21:22    

Harkonnen a écrit :


tu fais du C#, t'as pas besoin des pointeurs !


 
unsafe
{
  peut être hein, qui sait.. :D  
}


---------------
yvele n'est plus.
Reply

Marsh Posté le 01-02-2004 à 14:22:58    

taz a écrit :


 
toi aussi, le jeune, tu peux l'utiliser pour mettre en évidence un message déjà posté :)


 
ce smiley n'a pas été prévu pour ça, et son look en caps est là en témoignage des quotes de smileys foireux d'Harko
donc ce smiley est à la base pour ridiculisé celui qui est quoté.
Enfin, tu peux te quoter si ça t'amuses :o


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 01-02-2004 à 14:55:25    

antp a écrit :


 
ce smiley n'a pas été prévu pour ça, et son look en caps est là en témoignage des quotes de smileys foireux d'Harko
donc ce smiley est à la base pour ridiculisé celui qui est quoté.
Enfin, tu peux te quoter si ça t'amuses :o

OK. j'ai le droit d'être ridicule. Je vais me cherche un  simley pour dire [:comme_dit_plus_haut]

Reply

Marsh Posté le 01-02-2004 à 22:29:49    

pour ben j'ai pas de succès en fait.
y a pas beaucoup d'amateurs. la question de BlackGodess sur les friend template a fait un bide ...

Reply

Marsh Posté le 01-02-2004 à 23:25:07    

J'en aurais bien des questions, mais elles sont encore bien vagues.  Notamment à propos des fonctions virtuelles et de leur surcoût à l'éxécution. En temps que débutant, j'ai pas mal d'à priori par rapport à l'emploi de fonctions virtuelles dans un programme qui nécessiterait les meilleurs performances possibles.
 
Dans quelle mesure ce surcoût devient non négligeable ? Y'a t'il des architectures (au sens organisation du code) à éviter absolument ?
 
Je "connais" en surface le fonctionnement des fonctions virtuelles (utilisation de la table des fonctions), mais je peux lire à droite à gauche que la surcharge est acceptable, mais pas pour certains types d'applications ayant des besoins important en performance.  
 
En fin de compte, dans quel mesure le polymorphisme est plus "efficace" qu'une logique avec des switch (je ne parle uniquement ici de l'aspect performance). En fin de compte, le seul désavantage serait que le compilateur ne puisse pas mettre en ligne les fonctions virtuelles.  
 
Quid de la situation ? :)


Message édité par Evadream -jbd- le 01-02-2004 à 23:31:32
Reply

Marsh Posté le 01-02-2004 à 23:31:33    

Evadream -jbd- a écrit :

J'en aurais bien des questions, mais elles sont encore bien vagues.  Notamment à propos des fonctions virtuelles et de leur surcoût à l'éxécution. En temps que débutant, j'ai pas mal d'à priori par rapport à l'emploi de fonctions virtuelles dans un programme qui nécessiterait les meilleurs performances possibles.


 
si il y a un surcout ca fait longtemps qu'il est tombé dans le domaine de l'oubli.

Citation :


 
En fin de compte, dans quel mesure le polymorphisme est plus "efficace" qu'une logique avec des switch (je ne parle uniquement ici de l'aspect performance). En fin de compte, le seul désavantage serait que le compilateur ne puisse pas mettre en ligne les fonctions virtuelles.  


 
je suis pret a parier que n'importe quel CPU prefere faire un appel indirect plutot que du defaut de prediction de branchement (surtout sur un gros switch de porc)


Message édité par chrisbk le 01-02-2004 à 23:32:26
Reply

Marsh Posté le 01-02-2004 à 23:32:10    

chrisbk a écrit :


si il y a un surcout ca fait longtemps qu'il est tombé dans le domaine de l'oubli.  


 
[:ddr555] Ok :)

Reply

Marsh Posté le 01-02-2004 à 23:32:37    

Evadream -jbd- a écrit :

Dans quelle mesure ce surcoût devient non négligeable ?

Je dirais que seul le profiler peut te le dire au cas-par-cas, car un bon paquet des appels retardés sont résolus à la compilation, pour des raisons diverses. prévoir à l'avance est quasi-impossible. Comme il est plus compliqué de les éliminer que de les rajouter, il vaut mieux développer correctement, profiler et limer dans les coins ce qui dépasse.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 01-02-2004 à 23:40:46    

Merci pour ces infos !

Reply

Marsh Posté le 01-02-2004 à 23:44:58    

Moi j'ai une question... est ce que Taz fait autre chose que de sortir "c'est de la merde", "c'est tres tres laid", "utilise Boost et laisse tomber le reste"... ainsi que de généralement mépriser les gens en se demandant après pourquoi il n'y à pas beaucoup de monde qui vient sur les topics [c/c++] ???
 
Sinon à part ca j'espère que tu es encore étudiant comme l'indique ton profil, comme ca tu as encore une chance de changer de comportement... sinon de droles de déconvenus vont te tomber dessus dans le futur.
 
Ah oui j'oubliais, fait attention tu forces trop sur la branlette de la norme "iso posix-gcc-2.23 bis repetita du template de la mort qui tue" et au final cela ne fait pas fonctionner un programme... d'ailleurs tu as déjà posté autre chose que 3 lignes de codes d'exemples convenus ?
 
Voilà c'était mon petit coup de gueule contre la mauvaise ambiance sur "programmation" et le c/c++ en particulier.

Reply

Marsh Posté le 01-02-2004 à 23:55:59    

- je crois que la plus part des gens veulent du commentaire. alors je critique tant et plus. y a pas de mépris dedans. je parle du code, pas des gens.
- vas y apprends moi à vivre
- je crois pas qu'apprendre à respecter une norme et à l'exploiter soit mauvais. et ça permet au gens, surtout aux étudiants de ne pas hypothéquer leurs connaissances; et ça rends également service à celui qui étudie avec différents systèmes. Après je vois pas ce que tu me reproches: faire code élégant et qui tire partit au mieux d'un langage ? ben y a des gens qui ont envie de le comprendre. Si toi tu captes pas une ligne et que tu veux rester à ton C préhistorique, grand bien te fasse. Ne pers pas de vu que le code c'est une façon de s'exprimer. J'aime le code sémantiquement riche. Si toi t'aimes le B-A-BA, fais donc. Et oui, je fais des programmes plus gros que 3 lignes et je pense pas que mes exemples soient mauvais. Plus courts ils sont meilleurs ils sont. Et quand je donne un exemple, la vérité est que beaucoup de gens sont surpris par ça construction, ça leur permet de découvrir quelque chose, et de se familiariser avec des concepts.

Reply

Marsh Posté le 02-02-2004 à 00:13:32    

taz a écrit :

- je crois que la plus part des gens veulent du commentaire. alors je critique tant et plus. y a pas de mépris dedans. je parle du code, pas des gens.
- vas y apprends moi à vivre
- je crois pas qu'apprendre à respecter une norme et à l'exploiter soit mauvais. et ça permet au gens, surtout aux étudiants de ne pas hypothéquer leurs connaissances; et ça rends également service à celui qui étudie avec différents systèmes. Après je vois pas ce que tu me reproches: faire code élégant et qui tire partit au mieux d'un langage ? ben y a des gens qui ont envie de le comprendre. Si toi tu captes pas une ligne et que tu veux rester à ton C préhistorique, grand bien te fasse. Ne pers pas de vu que le code c'est une façon de s'exprimer. J'aime le code sémantiquement riche. Si toi t'aimes le B-A-BA, fais donc. Et oui, je fais des programmes plus gros que 3 lignes et je pense pas que mes exemples soient mauvais. Plus courts ils sont meilleurs ils sont. Et quand je donne un exemple, la vérité est que beaucoup de gens sont surpris par ça construction, ça leur permet de découvrir quelque chose, et de se familiariser avec des concepts.


 
Je vais pas perdre mon temps à te répondre parce que je n'en vois pas l'intêret vu ton attitude mais :
 
- Oui tu aurais besoin d'apprendre autre chose que le c++ dans la vie.
 
- Et merci tu viens de me donner un superbe exemple de ce que tu fais généralement dans tes posts quel que soit le sujet... sinon fait attention je crois que tu commences à te prendre pour dieu.
 
Voilà, bonne nuit.

Reply

Marsh Posté le 02-02-2004 à 00:17:42    

pour résumer taz est un puriste borné (prend ça comme tu veux :))

Reply

Marsh Posté le 02-02-2004 à 00:18:29    

- le fait est que je connais beaucoup d'autres choses. J'ai pas mal de connaissances en C et C++, je crois qu'il y quand même quelques personnes ici qui sont contentes de les partager.
- je me suis élevé, si l'enfant comprenait que l'étincelle est feu, il n'aurait plus jamais froid.

Reply

Marsh Posté le 02-02-2004 à 00:20:19    

jagstang a écrit :

un puriste borné

justement non, les limites sont dans ta tête [:gnu]

Reply

Marsh Posté le 02-02-2004 à 00:24:01    

le C++ sapu spa sécure... :o
 
(@modos : quitte à ce que le topic parte en vrille, autant s'amuser)


---------------
Jubi Photos : Flickr - 500px
Reply

Marsh Posté le 02-02-2004 à 09:49:16    

billyboy78 a écrit :


- Oui tu aurais besoin d'apprendre autre chose que le c++ dans la vie.


hanhan ... on est sur prog@hardware   ou sur psycho@feminin.com la ?
 

billyboy78 a écrit :


- Et merci tu viens de me donner un superbe exemple de ce que tu fais généralement dans tes posts quel que soit le sujet... sinon fait attention je crois que tu commences à te prendre pour dieu.


 
Si ca te plait, tu reponds pas. Point.
Quand je vois les ravages de cours de C ou de C++ fait comme des branles dans les universités et/ou ecoles divers, j'estime qu'un travail comme cleuid e taz est necessaire. Si tu avais un tant soit peu de recul tu comprendrais que les remarques acerbes de taz ne vise jamais la personne mais bon ...
 

Reply

Marsh Posté le 02-02-2004 à 09:51:32    

Joel F a écrit :

j'estime qu'un travail comme cleuid e taz est necessaire.  
 


 
En tout cas ça a rendu mon code C++ moins pire : je mets moins de C dans mon C++ [:ddr555]


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 02-02-2004 à 09:54:22    

antp a écrit :


En tout cas ça a rendu mon code C++ moins pire : je mets moins de C dans mon C++ [:ddr555]


 
antp l'a essayé t il l'a adopté  [:spyer]  
 
Si je pouvais geuler sur mes etudiants comme ca moi aussi ^^

Reply

Marsh Posté le 02-02-2004 à 09:55:10    

antp a écrit :


 
En tout cas ça a rendu mon code C++ moins pire : je mets moins de C dans mon C++ [:ddr555]

+1
Il m'a montré la voie, merci Taz :)

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed