===背景====
这个问题源于在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。