その後のその後

iOSエンジニア 堤 修一のブログ github.com/shu223

ログ出力用マクロ

下記のような有名なログ出力マクロがありますが、

#ifdef DEBUG
#  define LOG_CURRENT_METHOD NSLog(@"%@/%@", NSStringFromClass([self class]), NSStringFromSelector(_cmd))
#else
#  define LOG_CURRENT_METHOD ;
#endif


これプラスアルファでちょっと便利なマクロをご紹介します。


下記マクロを定義して、

#ifdef DEBUG
#   define LOG_CURRENT_LINE(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);
#else
#   define LOG_CURRENT_LINE(...)
#endif


たとえばこのようにマクロを実行すると、

LOG_CURRENT_LINE(@"test");


こんな感じでクラス名、メソッド名、コード内の何行目か、が出力されます。

-[ViewController hoge:] [Line 542] test


__PRETTY_FUNCTION__ という定義済み変数はクラス名とメソッド名を、
__LINE__ という定義済み変数は行数を保持しているようです。