gpt4 book ai didi

c - 返回类型为 uint8_t 的函数返回 4 个字节

转载 作者:行者123 更新时间:2023-12-04 02:54:27 27 4
gpt4 key购买 nike

编辑:问题的解决方案是缺少原型(prototype)。

当我调用 uint8_t foo(uint16_t bar) 并将其返回值分配给 uint32_t temp 时,不仅 temp 的 LSB 被覆盖还有一点。这怎么可能?编译器是 GCC。

调用代码:

uint32_t temp = 0xAAAAAAAA;
printf("[%x]\n", temp);
temp = foo(me->bar);
printf("[%x]\n", temp);

输出:

[aaaaaaaa]
[4081ff]

这里是foo实现的相关部分。

typedef struct CMOCK_foo_CALL_INSTANCE_tag
{
UNITY_LINE_TYPE LineNumber;
uint8_t ReturnVal;
int CallOrder;
uint16_t Expected_nGoNo;
} CMOCK_foo_CALL_INSTANCE;

uint8_t foo(uint16_t bar)
{
CMOCK_foo_CALL_INSTANCE* cmock_call_instance =
(CMOCK_foo_CALL_INSTANCE*)CMock_Guts_GetAddressFor(Mock.foo_CallInstance);
(...)
return cmock_call_instance->ReturnVal;
}

最佳答案

确保调用 temp = foo(me -> bar); 的文件包含 uint8_t foo(uint16_t bar); 的原型(prototype)或完整定义> 在调用之前调用函数,通过 #include 指令,或通过在文件的前面添加原型(prototype)/定义。

如果函数没有已知的签名,编译器将假定签名为 int foo(); 并相应地生成代码。

使用 gcc -W -Wall 进行编译应该会在进行隐式函数签名假设时生成警告。

关于c - 返回类型为 uint8_t 的函数返回 4 个字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16947467/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com