有什麼不對這段代碼:枚舉在開關的情況下
#define str(x) #x
#define xstr(x) str(x)
typedef unsigned char uint8_t;
typedef enum
{
RED = 0x64,
GREEN = 0x65,
/* other enum values */
BLUE = 0x87
} Format;
char buffer[50];
/* other code and variables */
/* somewhere later in code */
myformat = RED;
/* later calling format function */
MapFormattToString(myformat,&buffer);
void MapFormattToString(uint8_t format,char *buffer)
{
printf("format = %x\n",format); /*format printf has output 64 */
switch(format)
{
case RED:
sprintf(buffer,"%s\n", xstr(RED));
break;
case GREEN:
sprintf(buffer,"%s\n", xstr(GREEN));
break;
case BLUE:
sprintf(buffer,"%s\n", xstr(BLUE));
break;
default:
sprintf(buffer,"Unsupported color\n");
}
}
如果我通過與myformat此功能步驟= RED,它不屬於通過任何的情況下,反而落在通過默認的開關案件。
我的目標是到緩衝區應該有紅色的它,而不是它的對應枚舉值即64
:GCC 3.4.5在Windows XP
嘗試將函數參數類型更改爲枚舉格式。一個枚舉不保證是uint8_t –
某些實現定義爲'__int8_t'。 – Jack
嘗試將'printf(「%08x%08x \ n」,format,A);'添加到'MapFormattToString'。它會告訴你到底是什麼與什麼相比。我想其中之一將不會是你所期望的。 – ugoren