知识点

1.  宏中的 ## 和 #

首先明白宏就是替换 ## 就是连接替换中的参数

例子1

如果你有几个参数有相关作用,为了区别用param1,param2,param3表示,用这个宏可以只传递1,2,3就可以输出每一个你想要的参数

//类似于c++中多态的作用

#define TEST1(id) cout<<param##id<<endl;

void main()

{

int param1 = 1, param2 = 2, param3 = 3;

TEST1(1);

TEST1(2);

TEST1(3);

}

单个的#就是在参数两侧加上””

2.\多行的宏定义

3.缺少参数时候可以在宏里面使用##但是不可以直接缺少参数

下面这种情况不能够通过编译

#define TEST2( a, b ) cout<<a<<b

void main()

{

int e = 1,b=2;

TEST2( e, );

}

这个就可以,输出1

#define TEST( a, b ) cout<<a##b

void main()

{

int e = 1,b=2;

TEST( e, );

}

Pixel.c中的宏定义

INT8 ( satd )

INT8 ( sad )

//这a里¤?就¨ª是º?上¦?面?说¦Ì的Ì?那?种?情¨¦况? 缺¨¡À少¦¨´参?数ºy 但Ì?是º?可¨¦以°?看¡ä到Ì? 其?实º¦Ìcpu就¨ª是º?在¨²别Àe的Ì?宏¨º里¤?面?通ª¡§过y##使º1用®?的Ì?

#define INT8( name, cpu ) INT8_NAME( name, name, cpu )

#define INT8_NAME ( name1, name2, cpu ) \

INT7_NAME( name1, name2, cpu) \

pixf->name1[PIXEL_4x16] = x264_pixel_##name2##_4x16##cpu

//第二行容易理解,但是INT7_NAME 和 INT8_NAME 中相同,一直调用其他的

所以先分析INT2_NAME

#define INIT2_NAME( name1, name2, cpu ) \

pixf->name1[PIXEL_16x16] = x264_pixel_##name2##_16x16##cpu;\

pixf->name1[PIXEL_16x8]  = x264_pixel_##name2##_16x8##cpu;

#define INIT4_NAME( name1, name2, cpu ) \

INIT2_NAME( name1, name2, cpu ) \

pixf->name1[PIXEL_8x16]  = x264_pixel_##name2##_8x16##cpu;\

pixf->name1[PIXEL_8x8]   = x264_pixel_##name2##_8x8##cpu;

#define INIT5_NAME( name1, name2, cpu ) \

INIT4_NAME( name1, name2, cpu ) \

pixf->name1[PIXEL_8x4]   = x264_pixel_##name2##_8x4##cpu;

#define INIT6_NAME( name1, name2, cpu ) \

INIT5_NAME( name1, name2, cpu ) \

pixf->name1[PIXEL_4x8]   = x264_pixel_##name2##_4x8##cpu;

#define INIT7_NAME( name1, name2, cpu ) \

INIT6_NAME( name1, name2, cpu ) \

pixf->name1[PIXEL_4x4]   = x264_pixel_##name2##_4x4##cpu;

#define INIT8_NAME( name1, name2, cpu ) \

INIT7_NAME( name1, name2, cpu ) \

pixf->name1[PIXEL_4x16]  = x264_pixel_##name2##_4x16##cpu;

//INT8(satd) 展开后

pixf->name1[PIXEL_16x16] = x264_pixel_satd_16x16;

pixf->name1[PIXEL_16x8]  = x264_pixel_satd_16x8;

pixf->name1[PIXEL_8x16]  = x264_pixel_satd_8x16;

//下面依次的调用到INT2_NAME

最开始调用的是  h->pixf.intra_mbcmp_x3_16x16( p_src, p_dst, a->i_satd_i16x16_dir );

初始化的时候    h->pixf.intra_mbcmp_x3_16x16 = satd ? h->pixf.intra_satd_x3_16x16 : h->pixf.intra_sad_x3_16x16;

转载于:https://www.cnblogs.com/hatreds/archive/2012/04/27/2473343.html

4-26 pixel赋值问题 mbcmp函数 宏定义相关推荐

  1. 函数宏定义 与函数自定义

    为什么在C语言中要有函数宏定义这种形式呢?宏定义可以帮助我们防止出错,提高代码的可移植性和可读性等. 在软件开发过程中,经常有一些常用或者通用的功能或者代码段,这些功能既可以写成函数,也可以封装成为宏 ...

  2. C 宏定义及函数宏定义

    C语言宏定义 参考连接: https://blog.csdn.net/u013910522/article/details/22672057https://www.cnblogs.com/bytebe ...

  3. 宏函数(宏定义)使用注意

    前言   一些经常使用的简单函数,我们会把他定义为宏函数,宏函数确实具有一些优势,本文将讲述宏函数的使用方法和重点踩坑. 使用方便 提高系统运行效率:宏函数并不是真正的函数,只是把语句嵌在其他函数内, ...

  4. velocity 函数宏定义

     定义函数 #macro(函数名 参数1 参数2) #macro(macroName arg1 arg2 -) ... #end ## 处理workspace函数#macro(dealWorkspac ...

  5. C语言开发必会 宏定义、宏函数

    文章目录 宏定义 宏函数 宏定义之闰年判断 宏定义 宏定义是C中三种预处理方式(宏定义.文件包含.条件编译)的一种,只做替换.不求解. 宏定义分为有参宏定义和无参宏定义两种.应特别注意有参宏定义的括号 ...

  6. c语言宏定义(c语言宏定义是什么意思)

    C语言宏定义名可以有括号和分号吗? 宏定义的名称,是C语言标识符的一种,和函数名,变量名的命名规则是一样的,只允许使用数字,字母,下划线,且不能以数字开头. 所以宏名是不可以有括号和分号的. 另外,在 ...

  7. Python函数的定义和使用教程

    def test(x): # x代表形参'''2*x+1:param x:整形数字:return:返回计算结果'''y = 2*x+1return y p = test(3) # test()表示运行 ...

  8. Python函数的定义和使用

    def test(x): # x代表形参'''2*x+1:param x:整形数字:return:返回计算结果'''y = 2*x+1return y p = test(3) # test()表示运行 ...

  9. 转 C++宏定义详解

    来自:传送门 C++宏定义详解 一.#define的基本用法 #define是C语言中提供的宏定义命令,其主要目的是为程序员在编程时提供一定的方便,并能在一定程度上提高程序的运行效率,但学生在学习时往 ...

  10. C中的预编译宏定义-转

    C中的预编译宏定义 2009-02-10 作者: infobillows 来源:网络 在将一个C源程序转换为可执行程序的过程中, 编译预处理是最初的步骤. 这一步骤是由预处理器(preprocesso ...

最新文章

  1. 论文浅尝 | 利用指针生成网络的知识图谱自然语言生成
  2. Java集合 Collection
  3. Ubuntu 18.04-20.04开机自动root用户登录(测试可用)
  4. 下载丨53页PDF,云和恩墨技术通讯(2021年4月刊)
  5. 推荐一款代码神器,代码量至少省一半! 1
  6. python数组初始化_Python科学计算库Numpy数组的初始化和基本操作
  7. 乒乓球单循环赛_乒乓球单循环赛积分表(比赛规则、对比表)
  8. Java并发练习:无锁编程
  9. linux cat命令使用方法,Linux cat命令怎么使用
  10. opencv3颜色识别(C++)
  11. 诗和远方其实并不遥远
  12. 央企控股及并购重组概念股名单
  13. ks 曲线_ROC曲线与KS曲线的理解
  14. Problem 2 慢跑问题
  15. 微信公众号图文中怎么下载封面图?
  16. Golang Cannot use ss(type AAA) as type AAA in map index
  17. Integer.valueOf、intValue、Integer.parseInt使用
  18. 【文集】Unity的热更新
  19. 用Matlab仿真手写绘图板上的电压分布
  20. angular5+动态设置页面标题title

热门文章

  1. mali GPU 官网指南
  2. 网络收包流程-软中断中process_backlog和poll方式处理流程(二)
  3. linux中的numa和swap
  4. python桌面程序臃肿_为Python应用构建最精简Docker
  5. 学习Linux必备的硬件基础一网打尽
  6. Dlib-人脸识别API说明
  7. Audio播放流程(六)---数据进入AudioTrack
  8. Audio播放流程(三)---NuPlayer流程之setAudioStreamType以及prepare
  9. 深入解读Docker底层技术Cgroup
  10. MotionEstimate运动估计综述