===背景====
这个问题源于在Visual Studio 2012中使用自动测试库示例,我发现了错误:

error C2143: Syntax error missing ) before {


printf("pts:%s pts_time:%s dts:%s dts_time:%s duration:%s duration_time:%s stream_index:%d\n",
    av_ts2str(pkt->pts), av_ts2timestr(pkt->pts, time_base),
    av_ts2str(pkt->dts), av_ts2timestr(pkt->dts, time_base),
    av_ts2str(pkt->duration), av_ts2timestr(pkt->duration, time_base),
    pkt->stream_index);

我发现
#define AV_TS_MAX_STRING_SIZE 32
#define av_ts2str(ts) av_ts_make_string((char[AV_TS_MAX_STRING_SIZE]){0}, ts)

为了消除不相关的语句,我将大printf替换为
printf("pts:%s \n",
    (char[32]){0}
    );

但错误还是一样,看起来是
(char[32]){0}

===问题====
由于这个示例源文件Mux.c是官方的(我想),可能不可能出错,所以语句是否与VS编译器错误或不兼容?或者我在这里遗漏了什么?

最佳答案

除了dasblinkenlight所说的,还有一种方法可以用MSVC编译ffmpeg(可能还有其他使用这个和其他C99结构的源代码)。脚本可以自动地将这个C99代码转换为希望等效的C89代码。
详见here

10-08 11:52