__FILE__
et __LINE__
sont bien connus. Il y a un __func__
depuis C99.
#include <iostream>
struct Foo {
void Do(){ std::cout << __func__ << std::endl; }
};
int main()
{
std::cout << __func__ << std::endl;
Foo foo; foo.Do();
return 0;
}
va sortir
main
Do
Existe-t-il une macro/mot clé permettant de générer un nom de méthode tel que Foo::Do
?
Boost a une macro d’utilité spéciale appelée BOOST_CURRENT_FUNCTION qui cache les différences entre les implémentations du compilateur.
Après son implémentation, nous voyons qu'il existe plusieurs macros dépendant du compilateur:
__PRETTY_FUNCTION__
- GCC, MetroWerks, Digital Mars, ICC, MinGW__FUNCSIG__
- MSVC__FUNCTION__
- Intel et IBM__FUNC__
- Borland__func__
- ANSI C99__FUNCTION__
et __PRETTY_FUNCTION__
.__FUNCSIG__
et __FUNCTION__
.Il n'y a pas de telle macro en C++ standard, et cela inclut le projet de norme C++ 0x que j'ai examiné. Cela compliquerait la compilation, car l'analyse (nécessaire pour déterminer la fonction) vient après le prétraitement, et je suppose que c'est pourquoi il n'y a rien dans la norme.
Le __func__
que vous utilisez n’est pas standard, bien que cela fonctionne apparemment sur votre compilateur.
Pas en C++ standard (et __func__
ne fait pas partie de C++). Votre implémentation peut avoir une telle fonctionnalité cependant - quel compilateur utilisez-vous?
Voir " Macros prédéfinies (C/C++) " pour une liste complète prise en charge par MS Visual Studio.
Cela pourrait être utile:
http://gcc.gnu.org/onlinedocs/gcc/Function-Names.html
#include"stdio.h"
#include"stdlib.h"
int main()
{
printf("line number is %d .. func name is %s, file name is %s",__LINE__,__PRETTY_FUNCTION__,__FILE__);
return 0;
}
Voici comment imprimer le numéro de ligne, le nom de la fonction et le nom du fichier dans gcc.