c - typedef 定长数组

标签 c arrays gcc typedef

我必须定义一个 24 位数据类型。我正在使用 char[3] 来表示该类型。我可以将 char[3] 类型定义为 type24 吗?我在代码示例中尝试过。我将 typedef char[3] type24; 放在我的头文件中。编译器没有提示它。但是当我在我的 C 文件中定义一个函数 void foo(type24 val) {} 时,它确实报错了。我希望能够定义像 type24_to_int32(type24 val) 这样的函数,而不是 type24_to_int32(char value[3])

最佳答案

typedef 将是

typedef char type24[3];

然而,这可能是一个非常糟糕的主意,因为结果类型是一个数组类型,但它的用户不会看到它是一个数组类型。如果用作函数参数,它将通过引用传递,而不是通过值传递,并且它的 sizeof 将是错误的。

更好的解决方案是

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

您可能还想使用 unsigned char 而不是 char,因为后者具有实现定义的符号。

关于c - typedef 定长数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16451225/

相关文章:

无法在 cygwin 中使用 SIGQUIT 终止子进程

c - 将 char 数组分解为结构

python - 编写一个修改参数的 python c 扩展

c - 如何将数组传递给无法修改它的函数?

c - 如何将 C 库链接到 GCC

c - 在C程序中使用fabs、fmin、fmax时,如果不包含math.h,为什么编译器/链接器不报错?

java - 在 Java 中将 List<Object[]> 转换为 Object[][]

c - 当我在增加指针后使用 strlen() 时会发生什么?

c++ - 无法使此代码在 MSVC 2015 和 GCC 7.3 之间交叉编译

c - printf() 在c 中用%p 格式打印的地址是哪个?