解決した後見てなかったので、遅くなりました。
gccはあまり詳しくないので、私のわかることだけですが。
まずgccはいろいろなOSで動作し、バージョンによっても事情が変わってくるので、使用している環境を明示していただいた方がいいのです。VC++をお使いのようなので、Windowsと仮定して回答します。もしWindowsでない場合は補足していただければ、他の人からも答えて頂けるかもしれません。
Windowsで動作するgccはCygwinとMinGWが有りますが、私はMinGWしか使ってないので、MinGWについて回答します。MinGWもいろいろな亜流があるようですが、現在使っているのはgcc (tdm64) 5.1.0です。他のものではまた、違うかもしれないです。
この問題はコンパイラーというよりは、VC++ライブラリの問題です。MinGWはVC++のライブラリ(msvcrt.dll)を使っているので、同じ現象がおこります。CygwinやLinuxで実行した場合は、この問題は起こらないのではないかと考えています。
回避策は#include <stdio.h>の前に#define __USE_MINGW_ANSI_STDIO 1を記述することです。
コード:
#define __USE_MINGW_ANSI_STDIO 1
#include <stdio.h>
これで、独自のprintfを使うようになり、"%n"が機能するようになります。