だから今、私はこのようになります定義された構造を有する:さまざまなフィールドを持つメッセージを解析し、フィールドに基づいてコマンドを実行する最も良い方法は何ですか?
typedef struct rec_msg {
uint8_t unit[4];
uint8_t subdevice[4];
uint8_t command[4];
uint16_t data[3];
uint16_t msg_id[1];
} rec_msg;
を...と私は、構造体の文字配列を読み、それに基づいてコマンドを実行します。今私はこのようにしています。それを行うにはもっときれいな方法があるようです。
if (strncmp((const char *)message->unit, "blah", 3) == 0)
{
if (strncmp((const char *)message->subdevice, "syr", 3) == 0)
{
if (strncmp((const char *)message->command, "rem", 3) == 0)
{
// run some command
}
else if (strncmp((const char *)message->command, "dis", 3) == 0)
{
// run some command
}
else
{
DEBUG_PRINT("Message contains an improper command name");
}
}
else if (strncmp((const char *)message->subdevice, "rot", 3) == 0)
{
if (strncmp((const char *)message->command, "rem", 3) == 0)
{
// run some command
}
else if (strncmp((const char *)message->command, "dis", 3) == 0)
{
// run some command
}
else
{
DEBUG_PRINT("Message contains an improper command name");
}
}
else
{
DEBUG_PRINT("Message contains an improper subdevice name");
}
}
else
{
DEBUG_PRINT("Message contains the wrong unit name");
}
}
_cleaner_はどういう意味ですか?マクロ? –
私は、基本的に巨大なif/else if treeを作成するのはちょっとばかげているようです。 – z470
まず構文解析を行い、構文解析されたコマンド/データで構造体を作成し、コマンドの/ caseを切り替えて実行します。 –