症状
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; } |