2

这个函数是由一个 API 提供给我的:

void GetTime(uint8_t*, uint8_t*, uint8_t*, uint8_t*, uint8_t*, uint8_t* );

GetTime通过写入这些指针返回时间。问题是,我只需要写入其中一个指针的值。如果我可以控制GetTime,我会检查指针是否是NULL或返回一个结构,但我不能。

这是我当前的解决方案,忽略 dummy* 指针:

uint8_t *seconds, *dummy0, *dummy1, *dummy3, *dummy4, *dummy5;
GetTime( dummy0, dummy1, dummy3, dummy4, dummy5, seconds );

有没有一种更简洁的方法来解决这个问题而减少混乱?

4

3 回答 3

7

首先,你做错了,你需要分配一个 uint8_t 并传递一个指针给它。

其次,您可以对所有人使用相同的虚拟对象:

uint8_t seconds, dummy;
GetTime( &dummy,&dummy,&dummy,&dummy,&dummy, &seconds );

最后,API 可以接受 NULL。这行得通吗?:

uint8_t seconds;
GetTime( NULL,NULL,NULL,NULL,NULL, &seconds );
于 2013-09-27T10:29:49.780 回答
2

如前所述,您可以使用这样的函数来帮助您调用GetTime

uint8_t dummy[5];
uint8_t seconds;

GetTime(dummy, dummy + 1, dummy + 2, dummy + 3, dummy + 4, &seconds);

return seconds;

如果您知道这GetTime适用于非唯一的指针,您可以摆脱这个(但话又说回来,您只节省了 4 个字节):

uint8_t dummy, seconds;

GetTime(&dummy, &dummy, &dummy, &dummy, &dummy, &seconds);

return seconds;
于 2013-09-27T10:33:18.703 回答
1

编写一个辅助函数,调用该函数提供虚拟指针,并且只接受一个指针——你关心的那个。

于 2013-09-27T10:28:26.433 回答