如何在 C 中有效地定义动态数组的自定义类型,确保向量数据类型的 const 限定,而无需借助常量方法和 make_const 函数的重复结构?我目前正在使用以下实现:
typedef struct
{
int * data;
unsigned long int len;
unsigned long int size;
} VecInt;
typedef struct
{
const int * data;
unsigned long int len;
unsigned long int size;
} CVecInt;
CVecInt make_const_VecInt ( VecInt * src )
{
return (CVecInt) { .data = src->data, .len = src->len, .size = src->size };
}
是否有更有效或更优雅的解决方案来实现 C 中向量数据类型所需的 const 限定?
我想避免由于与未对准相关的潜在风险而进行类型转换。
注意:MISRA-C 2012 推动了这一设计,解决方案至少应考虑此代码标准。
是否有更高效或更优雅的解决方案来达到期望的效果 C 中向量数据类型的 const 限定?
是的,不要向库用户公开该结构。只允许通过功能访问。另外,我会使用灵活的数组成员。
typedef struct
{
size_t len;
size_t size;
int data[];
} VecInt;
VecInt *create(size_t size)
{
VecInt *v = malloc(sizeof(*v) + size * sizeof(v -> data[0]));
if(v)
{
v -> len = 0;
v -> size = size;
}
return v;
}
size_t getsize(const void *v)
{
const VecInt *vi = v;
return vi ? vi -> size : 0;
}
/* etc */