341008 341008 - 2 months ago 22
C Question

typedef fixed length array

I have to define a 24-bit data type.I am using

char[3]
to represent the type. Can I typedef
char[3]
to
type24
? I tried it in a code sample. I put
typedef char[3] type24;
in my header file. The compiler did not complain about it. But when I defined a function
void foo(type24 val) {}
in my C file, it did complain. I would like to be able to define functions like
type24_to_int32(type24 val)
instead of
type24_to_int32(char value[3])
.

R.. R..
Answer

The typedef would be

typedef char type24[3];

However, this is probably a very bad idea, because the resulting type is an array type, but users of it won't see that it's an array type. If used as a function argument, it will be passed by reference, not by value, and the sizeof for it will then be wrong.

A better solution would be

typedef struct type24 { char x[3]; } type24;

You probably also want to be using unsigned char instead of char, since the latter has implementation-defined signedness.

Comments