假设我有一个大小为 1 字节的结构,它的声明方式为
typedef struct foo
{
uint8_t fo1:2;
uint8_t fo2:3;
uint8_t fo3:3;
}foo;
然后我想将 fo2
作为参数传递给函数 func_foo(fo2)
,但我不知道如何声明该函数,因为 fo2
实际上没有任何类型。知道该怎么做吗?感谢任何信息!
最佳答案
由于结构成员被声明为 uint8_t
,因此您将在调用的函数中使用该类型。
void func_foo(uint8_t x);
...
foo my_foo = {1, 2, 3};
func_foo(my_foo.fo2);
参数也可以是任何更广泛的类型,例如int
或 unsigned int
,因为 uint8_t
可以毫无错误地转换为这些类型。
基本上,只需像对待任何其他 uint8_t
结构成员一样对待它们即可。位字段意味着它们无法保存完整范围的 8 位值,并且它将它们全部打包在内存中的单个字节中。但是当您使用这些值时,您无需担心这一点。
关于c - 接受位域值的函数 arg 使用什么类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57438487/