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

来源:互联网 发布:routerpassview mac版 编辑:程序博客网 时间:2024/06/05 12:57
读代码时看到语句 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的关键词,在编译器以蓝色显示 ,它表示的意思如下:

__cdecl 是C Declaration的缩写(declaration,声明),表示C语言默认的函数调用方法:所有参数从右到左依次入栈,这些参数由调用者清除,称为手动清栈。被调用函数不会要求调用者传递多少参数,调用者传递过多或者过少的参数,甚至完全不同的参数都不会产生编译阶段的错误。

平时我们在定义函数时是没写上这个声明的,说明已经默认是这个参数或在其它地方声明了!

-------------------------------------------
欢迎大家加入图像识别技术交流群:271891601,另外,特别欢迎成都从事图像识别工作的朋友交流,我的QQ号2487872782

0 0