2

この関数は、API によって提供されます。

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

GetTimeこれらのポインタに書き込むことで時間を返します。問題は、これらのポインターの 1 つに書き込まれた値だけが必要なことです。制御GetTimeできれば、ポインターがあったかどうかを確認するか、NULL代わりに構造体を返すかのいずれかになりますが、できません。

これは私の現在の解決策であり、ダミー*ポインターを無視しています:

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

この関数を呼び出してダミー ポインターを提供し、関心のあるポインターを 1 つだけ受け取るヘルパー関数を作成します。

于 2013-09-27T10:28:26.433 に答える