这是个C++的问题,或者说,是C++语法里的一个问题。百度里未找到答案,来此询问
这是一截程序,只是个程序片段,想知道这里#endif,#else,和#ifdef HAVE_IPP,这三个后面的程序段,哪些是构成程序的主干部分?哪些是为了优化程序运行的可以在读程序的时候忽略的部分?
#endif
331 float* gradPtr = (float*)grad.ptr(y);
332 uchar* qanglePtr = (uchar*)qangle.ptr(y);
333
334 //输入图像img为单通道图像时的计算
335 if( cn == 1 )
336 {
337 for( x = 0; x < width; x++ )
338 {
339 int x1 = xmap[x];
340#ifdef HAVE_IPP
341 dbuf[x] = (float)(imgPtr[xmap[x+1]] - imgPtr[xmap[x-1]]);
342 dbuf[width + x] = (float)(nextPtr[x1] - prevPtr[x1]);
343#else
344 //下面2句把Dx,Dy就计算出来了,因为其对应的内存都在dbuf中
345 dbuf[x] = (float)(lut[imgPtr[xmap[x+1]]] - lut[imgPtr[xmap[x-1]]]);
346 dbuf[width + x] = (float)(lut[nextPtr[x1]] - lut[prevPtr[x1]]);
347#endif
348 }
349 }
350 //当cn==3时,也就是输入图像为3通道图像时的处理。
351 else
352 {
353 for( x = 0; x < width; x++ )
354 {
355 //x1表示第y行第x1列的地址
356 int x1 = xmap[x]*3;
357 float dx0, dy0, dx, dy, mag0, mag;
358#ifdef HAVE_IPP
答案:#ifdef ……#endif为优化部分,HAVE_IPP这个宏为1则执行后面的语句,否则执行#else后面的语句到#endif结束,跟if……else语句差不多,这是关于宏的问题,可以预读一下陈正冲的c语言深度剖析,讲得很详细
上一个:STM32 库函数求解释...
下一个:生下来就才思敏捷、满诗书,而是从。