このへん の話。やりかた思いついたので、VCでやってみました。ソースは こちら 。VC6のコンソール環境で確認。
オリジナルとの違いは、define()の第4引数以降をまとめて括弧で囲む必要があること。これは、VC6は(あたりまえですが)C99対応しておらず可変長関数マクロが使えないので、第4引数以降を1つの引数として扱っているためです。これを関数本体の文字列にしているのが asprintf_like() ですが、別段言及するほど特別なことはしていません。
オリジナル同様、単なる力業ですねえ。