デバッグ/ロギングプログラムで作業していて、各関数内に貼り付けることができるマクロを作成することができたら、関数名関数が呼び出されるたびにパラメータ値が返されます。コンパイル時に関数名を再構築することができますが、問題はパラメータ値をどのように出力するかです。関数内で関数名とパラメーター値を取得するマクロ
UPDATE:パラメータを取得するためにアーティクルを読んでいたのですが、アセンブリコードを呼び出してスタックポインタを操作していましたが、これはクロスプラットフォーム互換ではありません。
デバッグ/ロギングプログラムで作業していて、各関数内に貼り付けることができるマクロを作成することができたら、関数名関数が呼び出されるたびにパラメータ値が返されます。コンパイル時に関数名を再構築することができますが、問題はパラメータ値をどのように出力するかです。関数内で関数名とパラメーター値を取得するマクロ
UPDATE:パラメータを取得するためにアーティクルを読んでいたのですが、アセンブリコードを呼び出してスタックポインタを操作していましたが、これはクロスプラットフォーム互換ではありません。
関数名に__FUNCTION__
または__func__
マクロを使用できます。パラメータについては、これを実現するためのビルトインマクロはないと思います。
その他の有用なマクロは__LINE__
と__FILE__
です。
EDIT:
__FUNCTION__
と__func__
は、標準の一部ではありませんが、広くサポートされています。事前に定義されたマクロを
16.8情報:実装によって定義
__cplusplus
__DATE__
__FILE__
__LINE__
__STDC_HOSTED__
__TIME__
とマクロ:関数名の
__STDC__
__STDC_VERSION__
__STDC_ISO_10646__
'__func__' *は標準の一部ですが、マクロではありません。おそらくそれがあなたがその場所でそれを見つけられなかった理由です。 –
@JensGustedt私たちはC++標準について話していますか? –
いいえ私はCについて話していました.C11ではマクロではなく、定義済みの識別子6.4.2.2です。 AFAIRは既にC99に入っていたので、C++でもなければなりません。 –
、あなたが識別子__func__
(C99以降)標準を使用することができます。
C++では、GNU拡張識別子__PRETTY_FUNCTION__
もパラメータタイプを出力します。
質問者は、マクロから関数名を取得する方法を知っていたと述べました - 彼の関心事は関数のパラメータを出力していたことでした。 – Perry
すべてのパラメータ値を取得して印刷する移植性の高い方法はありません。マクロから行うことはできません。あなたは、あなたが望むものを達成するために別の方法を使わなければならないかもしれません。
他の方法は何ですか?私は確かにCコードの代わりにマクロを使用することができます。 – tunafish24
関数宣言のコードを無駄にしたマクロを使ってすべての関数宣言を行い、その値を関数自体の先頭に出力するという面白いことがあります。これはきれいではありません - 私はその道を下ることはありません。そういうわけで、狂気がある。現実の世界では、単にgdbを使うか、必要なときに必要なものを印刷してください。 – Perry
@Perryどうやってそれをやってみたいですか?あなたが実際の例を提供できるなら、私から+1してください。 –
CまたはC++?異なる言語。 – Puppy
しかし、マクロは両方とも同じでなければなりません。聴衆を広げるために両方を選択しました – tunafish24