LoginSignup
6
8

More than 5 years have passed since last update.

可変長引数のログを出力する(C/C++, Android, Objective-C)

Posted at

概要

色々な言語でログを吐こうと・・・。
C++ですらあまり使ったことのないけど・・・。
可変長引数を使った際のメモ。

ここでは#ifdefで切り分けて、
各言語の可変長引数用の出力メソッドを使います。

ソースコード

ヘッダーファイル

#include <stdarg.h>

class AN_Log {
public:
  AN_Log() {}
  virtual ~AN_Log() {}

  static void print(const char* format, ...);
}

ソースファイル

#include "AN_Log.h"

#ifdef _CPP
#include <stdio.h>
#elif _ANDROID
#include <android/log.h>
#elif _IOS
#import <Foundation/Foundation.h>
#endif

void AN_Log::print(const char* format, ...) {
    va_list args;
    va_start(args, format);

#ifdef _CPP
    vfprintf(stderr, format, args);
#elif _ANDROID
    __android_log_vprint(ANDROID_LOG_DEBUG, "Tag", format, args);
#elif _IOS
    NSLogv([NSString stringWithFormat:@"%s", format], args);
#endif

    va_end(args);
}

まとめ

今回、可変長引数のログ出力を調べた理由としては、
iOSアプリ開発にて、C++側で記述しているprintfではOrganizerには出力されなかったのが問題。
(Xcode上のデバッグコンソールにはprintfのログの出力されていたのだがOrganizerには出力されないらしい。)

そこで、
可変長引数をNSLogで出力する必要があったので、ついでにまとめました。

ちなみに動作確認はしてないので、
コピペで動かなかったらゴメンナサイ。

おまけ

vfprintf

int vfprintf(
    FILE *stream,
    const char *format,
    va_list argptr 
);

__android_log_vprint

int __android_log_vprint(
    int prio,
    const char *tag,
    const char *format,
    va_list args
);

NSLogv

void NSLogv(
    NSString* format,
    va_list args
);
6
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
8