如果你真的需要保留的狀態DOWN具有值-1,你必須特別注意用它來訪問時,數組元素。
考慮到你的狀態值在[-1 .. N-1]的範圍內,你可以給它們添加一個常數1以獲得可用於處理元素的索引[0..N]一個char *數組。
const char* const state_names[] = {"down","stop","up","load"};
只有當你有一個連續的數字序列時,這纔有效。如果您稍後添加狀態#define WHATEVER 1000
,則此方法將失敗。當你改變你的狀態值時,你必須相應地重新排序你的字符串數組。
如果您想要保持與您的狀態相關的值的靈活性,我會建議使用查找表來查看狀態名稱和值。
#include <stdio.h>
enum {LOAD, UP, STOP, DOWN};
const char* const state_names[] =
{
[LOAD] = "load",
[UP] = "up",
[STOP] = "stop",
[DOWN] = "down"
};
const int state_values[] =
{
[LOAD] = 2,
[UP] = 1,
[STOP] = 0,
[DOWN] = -1
};
int main()
{
int state = STOP;
printf("Current State Name: %s\n", state_names[state]);
printf("Current State Value: %i\n", state_values[state]);
return 0;
}
狀態的這種方式,命令或實際值並不重要了,你可以輕鬆地添加更多的狀態或對它們重新排序不會破壞代碼。
您可以定義一個查找來存儲這些字符串,以便lookup [-1] =「DOWN」,lookup [0] =「STOP」,.. – amdixon