这两天用c数组的时候觉得每次数组传入函数的时候都要传长度,不方便,所以试了一下在一个结构体里面保存数组和长度然后一起传到函数里面。后来又觉得每换一种数据类型就要重新写一种struct,也麻烦,于是想到用宏来自动生成定义结构体的代码。先来看一下main.c:
//---------------main.c------------------
#include<stdio.h>
#include<stdlib.h>
#include"macroArray.h" //定义了宏的头文件
__ExpendArray(int) //生成包含一个int数组的struct
__ExpendArray(double) //生成包含一个double数组的struct
int main()
{
Array(int) int_array;
Array(double) d_array;
//初始化两个数组
IniArr(int,int_array,"2,4,6,8");
IniArr(double,d_array,"2.4,55.3,72.98");
//打印两个数组
int_array.print(&int_array);
d_array.print(&d_array);
//给double数组末尾添加两个元素
d_array.addItem(&d_array,24.19);
d_array.addItem(&d_array,31.5);
//改变double数组元素的输出格式
d_array.setFormat(&d_array,"%.2lf");
//再打印一次
d_array.print(&d_array);
return 0;
}
运行结果:
{ 2 4 6 8 }
{ 2.400000 55.300000 72.980000 }
{ 2.40 55.30 72.98 24.19 31.50 }
上面的数组不仅记住了自己的长度,而且还自带了三种方法。下面来看macroArray.h :
#ifndef MACROARRAY_H
#define MACROARRAY_H
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef enum {