|
> ファイルの書き出しはテキストで行います。
ファイルに書き出すのなら、strcat や sprintf で文字列を char buf[N] に
書き込まなくて済みますね。次のように書くと、トークンの結合は不要です。
#define MEMBER が 2つあるので、最低 1つは #undef MEMBER が必要です。
#include <stdio.h>
#define MEMBERS_DEF \
MEMBER(int, m1, NA, "%d|" ) \
MEMBER(int, m2, NA, "%08x|") \
MEMBER(char, m3, NA, "%c|" ) \
MEMBER(char, m4, [16], "%s|" ) \
MEMBER(char *, m5, NA, "%s\n" ) \
typedef struct {
#define NA
#define MEMBER(type, member, size, format) type member size;
MEMBERS_DEF
} Rec;
void printRec(FILE *fp, const Rec *rp)
{
#undef MEMBER
#define MEMBER(type, member, size, format) fprintf(fp, format, rp->member);
MEMBERS_DEF
}
int main()
{
Rec rec = { 123, 0x80abcdef, 'A', "abcdef", "xyz" };
printRec(stdout, &rec);
return 0;
}
|