如果是C++,好多人建议用内敛
#include
#define add(a,b) (a+b)
int main()
{
int x=7 ,y=5,z ;
z=add(x,y);
printf("%d n", z);
return 1;
}
#define
定义的函数
#define的 续行符的用法
typedef unsigned
char uint8_t;
#include
#include
#define PIXEL_SAD_C( name, lx, ly )
static int name( uint8_t *pix1, int i_stride_pix1,
uint8_t *pix2, int i_stride_pix2 )
{
int i_sum = 0;
int x, y;
for( y = 0; y < ly; y++ )
{
for( x = 0; x < lx; x++ )
{
i_sum += abs( pix1[x] - pix2[x] );
}
pix1 += i_stride_pix1;
pix2 += i_stride_pix2;
}
return i_sum;
}
PIXEL_SAD_C( x264_pixel_sad_16x16, 8, 8
)
int main()
{
unsigned char sum;
uint8_t pix1[]={1,4,12,54, 65,7,8,10};
uint8_t pix2[]={1,4,12,54, 65,7,8,10};
sum= x264_pixel_sad_16x16(pix1,8, pix2, 8 );
printf("%dn",sum);
return 1;
}
//static int name(uint8_t *pix1, int i_stride_pix1, uint8_t
*pix2, int i_stride_pix2)函数原型
//sum= x264_pixel_sad_16x16(pix1,pix2, 16, 16 );
函数调用 lx ly是#define传去的参数
表示强制换行,而换行后的内容与前一行的内容编译器仍把它看作是同一行.
#define后面定义的内容比须在同一行,而有时是为了让程序便于阅读,从中间进行换行,如果没有符号'',则我们的换行表示
#define的结束,这也是为什么你去掉后会报错的原因.如果在这里加了'',也可以说是对"回车"的转义,表示这里有一个回车字符而已,#define并没有结束.而程序编译的时候,编译器会忽略掉这些'回车'的字符.
讲得不好,表达能力不强呵呵,但仍希望你能了解.如果你会用LINUX系统的话,你用命令行中输入 ls 回车
,系统也不会执行ls这个命令.它会认为你命令仍没有输完,会继续等待用户的输入.
是什么作用:续行符:表示在一行中。因为宏只能在一行中定义 关键是要在每一个换行的时候加上一个""
下面是程序去掉反划线,为了好理解:
#define PIXEL_SAD_C( name, lx, ly )
static int name( uint8_t *pix1, int
i_stride_pix1, uint8_t *pix2, int i_stride_pix2
)
{
int i_sum = 0;
int x, y;
for( y = 0; y < ly; y++ )
{
for( x = 0; x < lx; x++ )
{
i_sum += abs( pix1[x] - pix2[x] );
}
pix1 += i_stride_pix1;
pix2 += i_stride_pix2;
}
return i_sum;
}
PIXEL_SAD_C(
x264_pixel_sad_16x16, 8, 8 )
程序为什么要用宏定义这样写,就可能是可时用多个函数,而这几个函数只有几个参数不同,x264中的一段代码如下得到证明:#define
PIXEL_SAD_C( name, lx, ly )
static int name( uint8_t *pix1, int
i_stride_pix1, uint8_t *pix2, int i_stride_pix2 )
{ int i_sum =
0; int x,
y; for( y = 0;
y < ly; y++
) { for( x = 0; x < lx; x++
)