症状
Visual Studio でコンパイルすると次のようなエラーが発生する。
1 |
C3861 `__PRETTY_FUNCTION__`: 識別子が見つかりませんでした |
原因
__PRETTY_FUNCTION__
マクロは処理系依存で Visual Studio には存在しない(未定義である)ため。
類似のC言語のマクロに __FUNCTION__
がある。
__PRETTY_FUNCTION__
は __FUNCTION__
マクロのC++高機能版とみなすことができる。
Visual Studioにおける解決策
__FUNCSIG__
または __func__
に置き換える。
1 |
#define __PRETTY_FUNCTION__ __FUNCSIG__ |
GCCのおける __PRETTY_FUNCTION__ のマクロ展開例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
#include <iostream> using namespace std; class Dog { public: void bark() { cout << __FUNCTION__ << endl; // => "bark" cout << __PRETTY_FUNCTION__ << endl; // => "void Dog::bark() cout << "Bow-wow" << endl; // => "Bow-wow" }; }; int main() { cout << __FUNCTION__ << endl; // => "main" cout << __PRETTY_FUNCTION__ << endl; // => "int main()" Dog myDog; myDog.bark(); return 0; } |