2013年2月24日日曜日

C++でヒアドキュメント

cosmやwebsocket(javascript)にJSON形式でちょっと小さなデータを送る時、
C++のprintfで作る時にキーのダブルクオーテーションをエスケープするのは見づらいと思っていた。

例:
snprintf(buf, sizeof(buf), "{\"MMA7660\":{\"x\":%.2f,\"y\":%.2f,\"z\":%.2f}}", x, y, z);

しかし、マクロを使うことで少しは見やすくなります。
#define qq(...)  #__VA_ARGS__
snprintf(buf, sizeof(buf), qq({"MMA7660":{"x":%.2f,"y":%.2f,"z":%.2f}}), x, y, z);

複数行に書くことも出来ます。
#define qq(...)  #__VA_ARGS__
snprintf(buf, sizeof(buf), qq(
{
    "MMA7660": {
        "x":%.2f,
        "y":%.2f,
        "z":%.2f
    }
}
), x, y, z);

今のところ、うまく動いているが何か副作用があるかもしれない。

参考:
C でヒアドキュメントごっこ

(2013/2/24)
---

0 件のコメント: