web-dev-qa-db-fra.com

Macro/mot clé pouvant être utilisé pour imprimer le nom de la méthode?

__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?

42
Notinlist

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
77
Kornel Kisielewicz
  • Sur GCC, vous pouvez utiliser __FUNCTION__ et __PRETTY_FUNCTION__.
  • Sur MSVC, vous pouvez utiliser __FUNCSIG__ et __FUNCTION__.
8
rpg

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.

3
David Thornley

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?

1
anon

Voir " Macros prédéfinies (C/C++) " pour une liste complète prise en charge par MS Visual Studio.

1
Ruddy

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. 

0
Mayank