info()、debug()、error()関数を含むlog.cファイルを作成したい。 これらの機能は、ファイル名、行番号、等を印刷せずに機能しています。 私はこの関数の1つを呼び出すときに、呼び出し元のファイル名、行番号、関数名をダンプします。それでは、どうやって正確に追跡しますか? Cをトレースバックする方法はありますか、またはマクロを使用する場合、これをどのように行うことができますか?呼び出し関数のファイル名、行番号、関数名を出力する - C Prog
9
A
答えて
21
は私が
int info(const char *fname, int lineno, const char *fxname, ...) { /* ... */ }
int debug(const char *fname, int lineno, const char *fxname, ...) { /* ... */ }
int error(const char *fname, int lineno, const char *fxname, ...) { /* ... */ }
を(多分マクロの助けを得る)、それらを呼び出すためのパラメータによって関数にデータを渡したい
info(__FILE__, __LINE__, __func__, ...);
debug(__FILE__, __LINE__, __func__, ...);
error(__FILE__, __LINE__, __func__, ...);
注:__func__
がC99です。 gcc、モードC89で__FUNCTION__
5
マクロを使用する場合は、__FILE__
,__LINE__
、および__FUNCTION__
を使用してこの作業を行うことができます。例えば、
#define INFO(msg) \
fprintf(stderr, "info: %s:%d: ", __FILE__, __LINE__); \
fprintf(stderr, "%s", msg);
は、あなたも関数を使用することもできますが、あなたは彼らが正しい値を持っていたことを確認する__FILE__
などに合格する必要があります。
関連する問題
- 1. ログC++クラスメソッドの呼び出し元(関数名、行番号)
- 2. Nodejs - 関数名、行番号、ファイル名を出力します。
- 3. 関数が変数出力番号を呼び出す
- 4. 関数呼び出しから関数呼び出し名を抽出する
- 5. 関数名を指定してトリガ関数を呼び出す
- 6. Nodejs:呼び出し元関数のファイル名を取得する
- 7. 関数のポインタではなく関数の呼び出し名
- 8. 関数名からのJavascript呼び出し関数
- 9. data.frameの名前と列番号で変数を呼び出す
- 10. 別の関数呼び出しで関数を呼び出す
- 11. C関数呼び出し
- 12. jsファイル名を使用してjavascript関数を呼び出す
- 13. Python変数として関数名を呼び出す
- 14. 実行時に名前で関数を呼び出す
- 15. Eclipse呼び出し階層ビューで呼び出し関数のファイル名を表示する方法
- 16. 名前が変数にあるjavascript関数を呼び出す
- 17. 関数を関数名に代入して関数名で呼び出すことはできますか?
- 18. 単一ファイルを使用したPythonロギング(関数名、ファイル名、行番号)
- 19. P /呼び出された名前で関数を呼び出す
- 20. SICPからスキーム番号関数を呼び出すには
- 21. cプログラム呼び出し関数の呼び出し
- 22. クラス名そのものを呼び出す関数ですか?
- 23. javascriptの名前の関数呼び出し投げるエラー
- 24. C++の関数を呼び出す
- 25. C#のlibyahoo2関数を呼び出す
- 26. 静的関数をメソッド名で呼び出しますか?
- 27. 関数名を文字列として呼び出す
- 28. "new"匿名関数呼び出しの前に返すオブジェクト
- 29. 呼び出された、存在しない関数の関数名の完成
- 30. 関数名の文字列からのlua呼び出し関数
http://stackoverflow.com/questions/2651850/can-func-get-the-lineno-who-call-itself-cc – kennytm
[C/C++行番号] (http://stackoverflow.com/questions/2849832/cc-line-number) – user7116
@KennyTM:ありがとう!答えはそこにある。 – sura2k