Cherche option obscure de g++

Cherche option obscure de g++ - C++ - Programmation

Marsh Posté le 02-10-2003 à 21:26:54    

Voila j'ai besoin de visualiser un bout de code utilisant des templates APRES leur instanciations. Y a t il une option de gcc pour farie ca ??


Message édité par Joel F le 02-10-2003 à 21:27:11
Reply

Marsh Posté le 02-10-2003 à 21:26:54   

Reply

Marsh Posté le 02-10-2003 à 21:30:41    

visualiser sous quelle forme ?

Reply

Marsh Posté le 02-10-2003 à 21:34:17    

ben du style templates instanciés :
 
Code original

Code :
  1. template<int T> void test()
  2. {
  3.   std::cout << R << std::endl;
  4.   test<T-1>();
  5. }
  6. template<> void test<0>()
  7. {
  8.   std::cout << 0 << std::endl;
  9. }
  10. int main(int,char**)
  11. {
  12.   test<10>();
  13.   return 0;
  14. }


 
Moi je veux :

Code :
  1. int main(int,char**)
  2. {
  3.   std::cout << 10 << std::endl;
  4.   std::cout << 9 << std::endl;
  5.   std::cout << 8 << std::endl;
  6.   std::cout << 7 << std::endl;
  7.   std::cout << 6 << std::endl;
  8.   std::cout << 5 << std::endl;
  9.   std::cout << 4 << std::endl;
  10.   std::cout << 3 << std::endl;
  11.   std::cout << 2 << std::endl;
  12.   std::cout << 1 << std::endl;
  13.   std::cout << 0 << std::endl;
  14.   return 0;
  15. }


 
evidemmment la le template est bidon, moi j'ai enormement de template imbriqués etc ...
 
EDIT : correction sur test()


Message édité par Joel F le 02-10-2003 à 23:17:15
Reply

Marsh Posté le 02-10-2003 à 21:37:54    

je pense que tout ça est impossible, les templates, c'est pas du simple préprocesseur, je pense que tout ça se passe dans la machinerie interne de gcc au niveau du code intermédaire.
 
l'assembleur ça te suffit pas ? sinon y a une option pour avoir la liste des templates instanciés il me semble (avec -frepo, etc)

Reply

Marsh Posté le 02-10-2003 à 21:39:08    

-frepo ca m'aide pas ...
l'assembleur, bah c un peu obscur pour ce que je veux faire...
et j'ai besoin d'une trace qqconque pour lui prouver que les templates se deroulent proprement.
 
Mais je pense aussi que c DMC :-/


Message édité par Joel F le 02-10-2003 à 21:39:41
Reply

Marsh Posté le 02-10-2003 à 21:41:14    

en tout cas ça m'intéresse une technique pour le déroulage des templates. peut etre en émettant un message d'erreur si c'est possible

Reply

Marsh Posté le 02-10-2003 à 21:41:53    

en tout cas #error et #warning  ca marche pas :-/

Reply

Marsh Posté le 02-10-2003 à 21:49:17    

normal, ça se passe avec le prépo. le tout serait peut etre d'utiliser un static_warning (peut etre ce de boost) dans certains bou de code.
 
frepo ça te suffit pas ? tu connais un demangler d'ailleurs ? ou faut en écrire un? g++ respect le name-mangling ISO ?

Reply

Marsh Posté le 02-10-2003 à 21:51:19    

Taz a écrit :

normal, ça se passe avec le prépo. le tout serait peut etre d'utiliser un static_warning (peut etre ce de boost) dans certains bou de code.


Je vais tenté d'utiliser un Compile Time assert.
 

Taz a écrit :


tu connais un demangler d'ailleurs ?  
ou faut en écrire un?  
g++ respect le name-mangling ISO ?


 
je sais pas.
je sais pas.
je sais pas.
 
 [:t%40merenslip]

Reply

Marsh Posté le 02-10-2003 à 21:53:35    

si ça marche, colle un bout de code pour l'exemple bidon, je mate Sphère, que j'ai pas à m'embêter pour essayer. :D
 
 
pour le reste, faudrait chercher quand même

Reply

Marsh Posté le 02-10-2003 à 21:53:35   

Reply

Marsh Posté le 02-10-2003 à 21:55:55    

c++filt :sol:

Reply

Marsh Posté le 02-10-2003 à 22:08:29    

bizarre
 

Code :
  1. #include <iostream>
  2. template<int T>
  3. void test()
  4.   std::cout << T << std::endl;
  5.   test<T-1>();
  6. }
  7.  
  8. template<>
  9. void test<0>()
  10.   std::cout << 0 << std::endl;
  11. }
  12.  
  13. int main()
  14. {
  15.   test<10>();
  16. }


 
 
sans inline
 
[benoit@athlon tmp]$ g++ -frepo -O0 -Winline -c test.cpp  
[benoit@athlon tmp]$ c++filt < test.rpo | grep test
M test.cpp
O void test<9>()
O void test<10>()
 
 
avec inline
 
[benoit@athlon tmp]$ g++ -frepo -O0 -Winline -c test.cpp  
[benoit@athlon tmp]$ c++filt < test.rpo | grep test
M test.cpp
O void test<1>()
O void test<2>()
O void test<3>()
O void test<4>()
O void test<5>()
O void test<6>()
O void test<7>()
O void test<8>()
O void test<9>()
O void test<10>()

Reply

Marsh Posté le 02-10-2003 à 22:08:35    

Bingo !
merci boost :
 

Code :
  1. #include <iostream>
  2. #include <boost/static_assert.hpp>
  3. template<int T> void test()
  4.    std::cout << T << std::endl;
  5.    BOOST_STATIC_ASSERT(false);
  6.    test<T-1>();
  7. }
  8.  
  9. template<> void test<0>()
  10.    std::cout << 0 << std::endl;
  11.    BOOST_STATIC_ASSERT(false);
  12. }
  13. int main(int argc, char *argv[])
  14. {
  15.   test<10>(); 
  16.   system("PAUSE" );
  17.   return 0;
  18. }


 
en sortie :
 

Code :
  1. main.cpp: In function `void test() [with int T = 0]':
  2. main.cpp:25: `sizeof' applied to incomplete type `
  3.    boost::STATIC_ASSERTION_FAILURE<false>'
  4. main.cpp: In function `void test() [with int T = 10]':
  5. main.cpp:32:   instantiated from here
  6. main.cpp:18: `sizeof' applied to incomplete type `
  7.    boost::STATIC_ASSERTION_FAILURE<false>'
  8. main.cpp: In function `void test() [with int T = 9]':
  9. main.cpp:19:   instantiated from `void test() [with int T = 10]'
  10. main.cpp:32:   instantiated from here
  11. main.cpp:18: `sizeof' applied to incomplete type `
  12.    boost::STATIC_ASSERTION_FAILURE<false>'
  13. main.cpp: In function `void test() [with int T = 8]':
  14. main.cpp:19:   instantiated from `void test() [with int T = 9]'
  15. main.cpp:19:   instantiated from `void test() [with int T = 10]'
  16. main.cpp:32:   instantiated from here
  17. main.cpp:18: `sizeof' applied to incomplete type `
  18.    boost::STATIC_ASSERTION_FAILURE<false>'
  19. main.cpp: In function `void test() [with int T = 7]':
  20. main.cpp:19:   instantiated from `void test() [with int T = 8]'
  21. main.cpp:19:   instantiated from `void test() [with int T = 9]'
  22. main.cpp:19:   instantiated from `void test() [with int T = 10]'
  23. main.cpp:32:   instantiated from here
  24. main.cpp:18: `sizeof' applied to incomplete type `
  25.    boost::STATIC_ASSERTION_FAILURE<false>'
  26. main.cpp: In function `void test() [with int T = 6]':
  27. main.cpp:19:   instantiated from `void test() [with int T = 7]'
  28. main.cpp:19:   instantiated from `void test() [with int T = 8]'
  29. main.cpp:19:   instantiated from `void test() [with int T = 9]'
  30. main.cpp:19:   instantiated from `void test() [with int T = 10]'
  31. main.cpp:32:   instantiated from here
  32. main.cpp:18: `sizeof' applied to incomplete type `
  33.    boost::STATIC_ASSERTION_FAILURE<false>'
  34. main.cpp: In function `void test() [with int T = 5]':
  35. main.cpp:19:   instantiated from `void test() [with int T = 6]'
  36. main.cpp:19:   instantiated from `void test() [with int T = 7]'
  37. main.cpp:19:   instantiated from `void test() [with int T = 8]'
  38. main.cpp:19:   instantiated from `void test() [with int T = 9]'
  39. main.cpp:19:   instantiated from `void test() [with int T = 10]'
  40. main.cpp:32:   instantiated from here
  41. main.cpp:18: `sizeof' applied to incomplete type `
  42.    boost::STATIC_ASSERTION_FAILURE<false>'
  43. main.cpp: In function `void test() [with int T = 4]':
  44. main.cpp:19:   instantiated from `void test() [with int T = 5]'
  45. main.cpp:19:   instantiated from `void test() [with int T = 6]'
  46. main.cpp:19:   instantiated from `void test() [with int T = 7]'
  47. main.cpp:19:   instantiated from `void test() [with int T = 8]'
  48. main.cpp:19:   instantiated from `void test() [with int T = 9]'
  49. main.cpp:19:   instantiated from `void test() [with int T = 10]'
  50. main.cpp:32:   instantiated from here
  51. main.cpp:18: `sizeof' applied to incomplete type `
  52.    boost::STATIC_ASSERTION_FAILURE<false>'
  53. main.cpp: In function `void test() [with int T = 3]':
  54. main.cpp:19:   instantiated from `void test() [with int T = 4]'
  55. main.cpp:19:   instantiated from `void test() [with int T = 5]'
  56. main.cpp:19:   instantiated from `void test() [with int T = 6]'
  57. main.cpp:19:   instantiated from `void test() [with int T = 7]'
  58. main.cpp:19:   instantiated from `void test() [with int T = 8]'
  59. main.cpp:19:   instantiated from `void test() [with int T = 9]'
  60. main.cpp:19:   instantiated from `void test() [with int T = 10]'
  61. main.cpp:32:   instantiated from here
  62. main.cpp:18: `sizeof' applied to incomplete type `
  63.    boost::STATIC_ASSERTION_FAILURE<false>'
  64. main.cpp: In function `void test() [with int T = 2]':
  65. main.cpp:19:   instantiated from `void test() [with int T = 3]'
  66. main.cpp:19:   instantiated from `void test() [with int T = 4]'
  67. main.cpp:19:   instantiated from `void test() [with int T = 5]'
  68. main.cpp:19:   instantiated from `void test() [with int T = 6]'
  69. main.cpp:19:   instantiated from `void test() [with int T = 7]'
  70. main.cpp:19:   instantiated from `void test() [with int T = 8]'
  71. main.cpp:19:   instantiated from `void test() [with int T = 9]'
  72. main.cpp:19:   instantiated from `void test() [with int T = 10]'
  73. main.cpp:32:   instantiated from here
  74. main.cpp:18: `sizeof' applied to incomplete type `
  75.    boost::STATIC_ASSERTION_FAILURE<false>'
  76. main.cpp: In function `void test() [with int T = 1]':
  77. main.cpp:19:   instantiated from `void test() [with int T = 2]'
  78. main.cpp:19:   instantiated from `void test() [with int T = 3]'
  79. main.cpp:19:   instantiated from `void test() [with int T = 4]'
  80. main.cpp:19:   instantiated from `void test() [with int T = 5]'
  81. main.cpp:19:   instantiated from `void test() [with int T = 6]'
  82. main.cpp:19:   instantiated from `void test() [with int T = 7]'
  83. main.cpp:19:   instantiated from `void test() [with int T = 8]'
  84. main.cpp:19:   instantiated from `void test() [with int T = 9]'
  85. main.cpp:19:   instantiated from `void test() [with int T = 10]'
  86. main.cpp:32:   instantiated from here
  87. main.cpp:18: `sizeof' applied to incomplete type `
  88.    boost::STATIC_ASSERTION_FAILURE<false>'

Reply

Marsh Posté le 02-10-2003 à 22:09:44    

Taz a écrit :

bizarre
sans inline
 
[benoit@athlon tmp]$ g++ -frepo -O0 -Winline -c test.cpp  
[benoit@athlon tmp]$ c++filt < test.rpo | grep test
M test.cpp
O void test<9>()
O void test<10>()
 
 
avec inline
 
[benoit@athlon tmp]$ g++ -frepo -O0 -Winline -c test.cpp  
[benoit@athlon tmp]$ c++filt < test.rpo | grep test
M test.cpp
O void test<1>()
O void test<2>()
O void test<3>()
O void test<4>()
O void test<5>()
O void test<6>()
O void test<7>()
O void test<8>()
O void test<9>()
O void test<10>()


 
-ftemplate-deph-32 :o ??

Reply

Marsh Posté le 02-10-2003 à 22:13:59    

ne change rien.  
 
remets ta signature, je t'ai encore sauvé la vie

Reply

Marsh Posté le 02-10-2003 à 22:14:43    

arf c vrai :D

Reply

Marsh Posté le 02-10-2003 à 22:20:48    

tu as quoi comme version de g++, de boost ? moi j'ai le message, mais pas sa provenance

Reply

Marsh Posté le 02-10-2003 à 22:25:27    

Dev C++ version 4.9.8.0
Boost 1.3.0
 
regarde dans l'onglet "Compiler Log"

Reply

Marsh Posté le 02-10-2003 à 22:26:05    

tu te fout de ma gueule là :o

Reply

Marsh Posté le 02-10-2003 à 22:27:31    

pourquoi ??? :o

Reply

Marsh Posté le 02-10-2003 à 22:27:47    

Joel F a écrit :

Dev C++ version 4.9.8.0
Boost 1.3.0
 
regarde dans l'onglet "Compiler Log"


 
toi un windozien, quel gachis, t'es pas un vrai  :pfff:


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
Reply

Marsh Posté le 02-10-2003 à 22:28:10    

???
et tu sais quoi, j'ai meme desinstallé vc6 pour remettre emacs, gcc, les gnu tools.
j'utilise wget et meme gnuplot sur mon win2k  :kaola:


Message édité par Joel F le 02-10-2003 à 22:28:45
Reply

Marsh Posté le 02-10-2003 à 22:29:42    

Joel F a écrit :

???
et tu sais quoi, j'ai meme desinstallé vc6 pour remettre emacs, gcc, les gnu tools.
j'utilise wget et meme gnuplot sur mon win2k  :kaola:  


 
à quoi bon utiliser du tainted gnu ?


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
Reply

Marsh Posté le 02-10-2003 à 22:30:06    

dire que tu pourrais avoir Debian sur tes x86 et PPC :pfff:

Reply

Marsh Posté le 02-10-2003 à 22:30:50    

J'aime pas Linux :p

Reply

Marsh Posté le 02-10-2003 à 22:32:00    

[:xx_xx]

Reply

Marsh Posté le 02-10-2003 à 22:34:25    

et oui, ca me fait chier c tout, moi c Mac Os X ou W2k ou rien na !


Message édité par Joel F le 02-10-2003 à 22:39:20
Reply

Marsh Posté le 02-10-2003 à 22:36:16    

[:heink] Linux est le plus rapide des Unix pour Macintosh. Même remarque pour Windows ... ça doit pas être la fête tous les jours. tu baisses dans mon estime.

Reply

Marsh Posté le 02-10-2003 à 22:36:37    

:heink:

Reply

Marsh Posté le 02-10-2003 à 22:40:05    

Taz a écrit :

[:heink] Linux est le plus rapide des Unix pour Macintosh. Même remarque pour Windows ... ça doit pas être la fête tous les jours. tu baisses dans mon estime.


 
ben ecoute j'ai eu enormement d eprobleme avec pas mald e distrib ...
 
si tu veux tu me donne une bonne distrib et on en parle plus, je partitionne mon dur et je tente l'expereince :p

Reply

Marsh Posté le 02-10-2003 à 22:41:56    

bah Debian, à moins que tu n'es pas le niveau. les dernières RH et Mdk sont très fonctionnelles

Reply

Marsh Posté le 02-10-2003 à 22:43:44    

Taz a écrit :

bah Debian, à moins que tu n'es pas le niveau.


 
c'est à dire "le niveau" ... ?
RH :vomi: ...  
Mandrake merci bien ...


Message édité par Joel F le 02-10-2003 à 22:44:02
Reply

Marsh Posté le 02-10-2003 à 22:52:07    

ben pourquoi tu aimes pas ces distributions ?

Reply

Marsh Posté le 02-10-2003 à 22:53:51    

Red Hat je l'ai eu au boulot, ct merdique ... lent au possible.
Mandrake ben tt le monde m'en dit du mal.

Reply

Marsh Posté le 02-10-2003 à 22:55:12    

lent ? :heink:
ben essaye Debian. Mdk et RH sont bien quoi qu'on en dise...

Reply

Marsh Posté le 02-10-2003 à 22:57:35    

OK, je tente debian sur le 2e PC on verra bien :D
 
 
de tt maniere g qd mem besin de win2k donc bon :p

Reply

Marsh Posté le 02-10-2003 à 22:59:16    

on doit pas avoir la même définition de ce qui est bon. t'en es réduit à devoir installer gcc sous Windows pour devoir travailler, moi j'aurais pas réfléchi longtemps

Reply

Marsh Posté le 02-10-2003 à 23:03:11    

ecoute, je doit aussi develloper des DLL win32 et plus souvent que de faire des test ss gcc.
 
J'utilise principalement gcc au boulot sur le Mac donc bon ...

Reply

Marsh Posté le 02-10-2003 à 23:05:37    

oauis mais sur tes ordos persos c'est quand même la honte :o


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
Reply

Marsh Posté le 02-10-2003 à 23:06:38    

excuse moi mais non ....
je vois pas ce qui a de honteux d'utiliser windows 2000 avec des outils gnu ou gcc ou tt ce que je veux.
Franchement, c'est vous qui me decevez ... extremistes nerdz :o


Message édité par Joel F le 02-10-2003 à 23:07:02
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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