DSP

理解OpenCV中的宏定义 CVAPI(函数返回类型)(转载)

2019-07-13 18:23发布

读代码时看到语句 CVAPI(IplImage*)  cvCreateImage( CvSize size, int depth, int channels ); 遂想了解下这个CVAPI到底是怎么回事!
#define CVAPI(rettype) CV_EXTERN_C CV_EXPORTS rettype CV_CDECL
CV_EXTERN_C 的宏定义是#define CV_EXTERN_C extern "C" extern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码。加上extern "C"后,会指示编译器这部分代码按C语言的进行编译,而不是C++的 CV_EXPORTS 的宏定义为#  define CV_EXPORTS __declspec(dllexport) 详细解释见博文 http://blog.csdn.net/wenhao_ir/article/details/51489091 可见CV_EXPORTS暂时无实质性内容,只是一个预留宏定义,是为了OpenCV在编程上的可扩展性预留的
rettype是宏定义的参数了,这里放具体的类型,表示函数的返回类型! CV_CDECL的宏定义是#define CV_CDECL __cdecl   __cdecl是VC的关键词,在编译器以蓝 {MOD}显示 ,它表示的意思如下:
__cdecl 是C Declaration的缩写(declaration,声明),表示C语言默认的函数调用方法:所有参数从右到左依次入栈,这些参数由调用者清除,称为手动清栈。被调用函数不会要求调用者传递多少参数,调用者传递过多或者过少的参数,甚至完全不同的参数都不会产生编译阶段的错误。 平时我们在定义函数时是没写上这个声明的,说明已经默认是这个参数或在其它地方声明了! ------------------------------------------- 转载出处:http://blog.csdn.net/wenhao_ir/article/details/51460547