1

次のマクロのセット(文字列でコンパイル時定数__LINE__を使用するにはどうすればよいですか?)を定義し、マクロ'LOCATION_PREFIX'を使用して「キャプチャ」することができます。コード行の場所(ロギングを実行する他の関数に渡されます)。

#define STRINGIZE(f,l) STRINGIZE2(f) "(" STRINGIZE2(l)"):"
#define STRINGIZE2(x) #x
#define LOCATION_PREFIX STRINGIZE(__FILE__, __LINE__)

int main(){

printf("%s here\n", LOCATION_PREFIX);
printf("%s over here\n", LOCATION_PREFIX);

return 1;
}

出力:

"t.cpp"(8):ここ
"t.cpp"(9):ここ

出力を次のようにします。

t.cpp(8):ここ
t.cpp(9):ここ

どんな助けでも大歓迎です!

4

1 に答える 1

4

STRINGIZE2ファイル名はすでに引用符で囲まれた文字列であるため、最初の呼び出しは必要ありません。

#define STRINGIZE(f,l) f "(" STRINGIZE2(l) "):"
#define STRINGIZE2(x) #x
#define LOCATION_PREFIX STRINGIZE(__FILE__, __LINE__)

int main(){
  printf("%s here\n", LOCATION_PREFIX);
  printf("%s over here\n", LOCATION_PREFIX);

  return 1;
}
于 2013-03-20T15:30:22.173 に答える