関数内に置くことができます(gccの場合)
printf("%s: I am here!", __FUNCTION__);
特定のメッセージがどこから来たのかを示すために。ここで、サーバル関数 A1、A2、A3、... があるとします。これらはすべて関数 B() を呼び出す可能性があります。実行時にどの関数が B() を呼び出すかを示すきちんとした方法があるかどうか疑問に思っています。
単純に使用できますbacktrace()
(これも完全に移植可能ではありません)
このリンクを参照してください: http://www.kernel.org/doc/man-pages/online/pages/man3/backtrace.3.html
これを行う移植可能な方法はありません。ただし、移植性のないハックの領域を掘り下げたい場合は、GCC__builtin_return_address()
がリターン アドレスを取得できるものを提供します。その後、そのアドレスをdladdr
(これも非標準関数ですが、ほとんどの UNIX ライクなシステムで利用可能です) に渡すと、バイナリ レベルで関数の名前が得られます (これは、何らかの種類のインライン展開の場合、抽象プログラム レベルでの関数とは異なる場合があります)。手順間分析ベースの最適化などが行われました)。デバッグ/プロファイリング以外の目的でこの種のハックを使用することはお勧めしません。
他のプラットフォームやコンパイラにも同様のメカニズムが存在すると思われます。