Vpp源码分析之 vec_len 宏的理解

在VPP代码中我们经常遇到地方使用vec_len的宏,但是不确定为什么就可以这样使用。自己在环境上调试了一下,就理解了。
1、vec变长长数组(data-plane\hdp\hdpinfra\hdpinfra\vec_bootstrap.h)

在这里插入图片描述

/*******![在这里插入图片描述](https://img-blog.csdnimg.cn/20181121102144956.?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2pzaDEzNDE3,size_16,color_FFFFFF,t_70)******************************************************************
 > File Name: test.c
 > Author:  jinshaohui
 > Mail:    [email protected]
 > Time:    18-11-20
 > Desc:    
 ************************************************************************/
#include<stdio.h>
#include<stdlib.h>
typedef struct {
	int len;
	char data[0];
}vec_header_t;
#define _vec_find(v)	((vec_header_t *) (v) - 1)
#define _vec_len(v)	(_vec_find(v)->len)
#define vec_len(v)	((v) ? _vec_len(v) : 0)
int main()
{
	vec_header_t *p = NULL;
	int *p1 = NULL;
	p = malloc(sizeof(vec_header_t) + 10 * sizeof(int*));
	p->len = 12;
	p1 = (int*)p->data;
	printf("\r\n %x %x %x",p,((vec_header_t*)p1),_vec_find(p1));
    printf("\r\n p->len: %d \r\n",vec_len(p1));
    printf("\r\n sizeof(vec_header_t):%d",sizeof(vec_header_t));
   return 0;
}

运行结果如下:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/jsh13417/article/details/84308820