奇妙なマクロ問題


#include <stdio.h>
#define f(i) {printf("%d",i);}

void main()
{
	f(5);
}

これは5を印刷します.
そしてプログラムを修正します.

#include <stdio.h>
#define printf_ex(x) printf x

void main()
{
	f(5);
}

これは意外にも間違いがなくて、また5を印刷します;

#include <stdio.h>
#define printf_ex(x) printf x
void main()
{
	f(5);
	printf_ex(8);
}

この時間違いが発生します.私のコンパイラはvc 6です.これは何の問題ですか.プリプロセッサに関連していますか?やはりコンパイラの問題です.