DECLARE_ALIGNED_8
最近在vs2008下读一个H264播放器的源代码,但是一直遇到一个编译问题,貌似是和对齐有关的,让我很困扰。
都是在
DECLARE_ALIGNED_8(int16_t, mv_cache[2][5*8][2]);
DECLARE_ALIGNED_8(int8_t, ref_cache[2][5*8]);
DECLARE_ALIGNED_16(DCTELEM, mb[16*24]);
这种地方报错,错误如下:
5>d:\visual studio 2008\vc\include\libavcodec\mpegvideo.h(436) : error C2059: 语法错误 : “常量”
5>d:\visual studio 2008\vc\include\libavcodec\mpegvideo.h(436) : warning C4183: “DECLARE_ALIGNED”: 缺少返回类型;假定为返回“int”的成员函数
5>d:\visual studio 2008\vc\include\libavcodec\h264.h(282) : error C2059: 语法错误 : “常量”
5>d:\visual studio 2008\vc\include\libavcodec\h264.h(282) : warning C4183: “DECLARE_ALIGNED”: 缺少返回类型;假定为返回“int”的成员函数
5>d:\visual studio 2008\vc\include\libavcodec\h264.h(288) : error C2059: 语法错误 : “常量”
5>d:\visual studio 2008\vc\include\libavcodec\h264.h(288) : error C2535: “int H264Context::DECLARE_ALIGNED(void)”: 已经定义或声明成员函数
5> d:\visual studio 2008\vc\include\libavcodec\h264.h(282) : 参见“H264Context::DECLARE_ALIGNED”的声明
5>d:\visual studio 2008\vc\include\libavcodec\h264.h(288) : warning C4183: “DECLARE_ALIGNED”: 缺少返回类型;假定为返回“int”的成员函数
5>d:\visual studio 2008\vc\include\libavcodec\h264.h(289) : error C2059: 语法错误 : “常量”
5>d:\visual studio 2008\vc\include\libavcodec\h264.h(289) : error C2535: “int H264Context::DECLARE_ALIGNED(void)”: 已经定义或声明成员函数
5> d:\visual studio 2008\vc\include\libavcodec\h264.h(282) : 参见“H264Context::DECLARE_ALIGNED”的声明
5>d:\visual studio 2008\vc\include\libavcodec\h264.h(289) : warning C4183: “DECLARE_ALIGNED”: 缺少返回类型;假定为返回“int”的成员函数
5>d:\visual studio 2008\vc\include\libavcodec\h264.h(353) : error C2059: 语法错误 : “常量”
5>d:\visual studio 2008\vc\include\libavcodec\h264.h(353) : error C2535: “int H264Context::DECLARE_ALIGNED(void)”: 已经定义或声明成员函数
5> d:\visual studio 2008\vc\include\libavcodec\h264.h(282) : 参见“H264Context::DECLARE_ALIGNED”的声明
5>d:\visual studio 2008\vc\include\libavcodec\h264.h(353) : warning C4183: “DECLARE_ALIGNED”: 缺少返回类型;假定为返回“int”的成员函数
5>d:\visual studio 2008\vc\include\libavcodec\h264.h(431) : error C2059: 语法错误 : “常量”
5>d:\visual studio 2008\vc\include\libavcodec\h264.h(431) : error C2535: “int H264Context::DECLARE_ALIGNED(void)”: 已经定义或声明成员函数
5> d:\visual studio 2008\vc\include\libavcodec\h264.h(282) : 参见“H264Context::DECLARE_ALIGNED”的声明
5>d:\visual studio 2008\vc\include\libavcodec\h264.h(431) : warning C4183: “DECLARE_ALIGNED”: 缺少返回类型;假定为返回“int”的成员函数
5>d:\visual studio 2008\vc\include\libavcodec\h264.h(450) : error C2059: 语法错误 : “常量”
5>d:\visual studio 2008\vc\include\libavcodec\h264.h(450) : error C2535: “int H264Context::DECLARE_ALIGNED(void)”: 已经定义或声明成员函数
5> d:\visual studio 2008\vc\include\libavcodec\h264.h(282) : 参见“H264Context::DECLARE_ALIGNED”的声明
5>d:\visual studio 2008\vc\include\libavcodec\h264.h(450) : warning C4183: “DECLARE_ALIGNED”: 缺少返回类型;假定为返回“int”的成员函数
5>e:\毕业设计\h264svc\代码\h264player\rtp_player\rtpformatcontext.h(89) : warning C4244: “参数”: 从“int64_t”转换到“unsigned int”,可能丢失数据
5>e:\毕业设计\h264svc\代码\h264player\rtp_player\rtp_player.cpp(274) : error C2039: “error_resilience”: 不是“AVCodecContext”的成员
5> d:\visual studio 2008\vc\include\libavcodec\avcodec.h(854) : 参见“AVCodecContext”的声明
h264.h文件里用了DECLARE_ALIGNED_8()和DECLARE_ALIGNED_16(),这两个宏能在dsputil.h文件中找到定义:
#ifndef DECLARE_ALIGNED_8
#define DECLARE_ALIGNED_8(t, v) DECLARE_ALIGNED(8, t, v)
#endif
#define DECLARE_ALIGNED_16(t, v) DECLARE_ALIGNED(16, t, v)
上边的错误到底是为什么呢?迷惑中。难道是因为vs2008这个编译器比较严格吗??请各位大侠指教!
[解决办法]
查一下 DECLARE_ALIGNED的定义
[解决办法]
DECLARE_ALIGNED(8, t, v)
怎么定义和声明的?
[解决办法]
DECLARE_ALIGNED_16 应该是个宏
[解决办法]
VC 下的话
#define DECLARE_ALIGNED(n,t,v) __declspec(align(n)) t v