在cvEqualizeHist的函数定义源码中发现了宏定义CV_IMPL,如下:
CV_IMPL void cvEqualizeHist( const CvArr* srcarr, CvArr* dstarr )
上网查询CV_IMPL的含义如下:
在internal.hpp文件里面有定义:
# define CV_IMPL CV_EXTERN_C
而关于CV_EXTERN_C,则在types_c.h里面有定义
# define CV_EXTERN_C extern "C"
从上面的嵌套定来看,CV_IMPL其实就相当于extern "C",它的含义如下:
编程语言种类繁多各有优劣,因此在做软件工程时,往往会出现不同语言嵌入或互相调用的情况;例如在C和C++之间就经常出现互相调用!虽然C++是C的超集,但是,它们之间的编译器是不同的,这就引发了各自的编译器在对C和C++进行编译时要依据哪一个作为大家都认可的规范或者约定的问题。
extern "C"就表明这句代码或这段代码用C编译器的规则去编译,而不是用C++的编译规则去编译。