这是啥意思额???TI的LM3S8962SD卡代码上的一段程序
typedef enum {FR_OK = 0, /* 0 */
FR_NOT_READY, /* 1 */
FR_NO_FILE, /* 2 */
FR_NO_PATH, /* 3 */
FR_INVALID_NAME, /* 4 */
FR_INVALID_DRIVE, /* 5 */
FR_DENIED, /* 6 */
FR_EXIST, /* 7 */
FR_RW_ERROR, /* 8 */
FR_WRITE_PROTECTED, /* 9 */
FR_NOT_ENABLED, /* 10 */
FR_NO_FILESYSTEM, /* 11 */
FR_INVALID_OBJECT, /* 12 */
FR_MKFS_ABORTED /* 13 */
} FRESULT;
/////////////////////////////////////////////
typedef struct
{
FRESULT fresult;
char *pcResultStr;
}
tFresultString;
/////////////////////////////////
#define FRESULT_ENTRY(f) { (f), (#f) }
////////////////////////////////
tFresultString g_sFresultStrings[] =
{
FRESULT_ENTRY(FR_OK),
FRESULT_ENTRY(FR_NOT_READY),
FRESULT_ENTRY(FR_NO_FILE),
FRESULT_ENTRY(FR_NO_PATH),
FRESULT_ENTRY(FR_INVALID_NAME),
FRESULT_ENTRY(FR_INVALID_DRIVE),
FRESULT_ENTRY(FR_DENIED),
FRESULT_ENTRY(FR_EXIST),
FRESULT_ENTRY(FR_RW_ERROR),
FRESULT_ENTRY(FR_WRITE_PROTECTED),
FRESULT_ENTRY(FR_NOT_ENABLED),
FRESULT_ENTRY(FR_NO_FILESYSTEM),
FRESULT_ENTRY(FR_INVALID_OBJECT),
FRESULT_ENTRY(FR_MKFS_ABORTED)
};
///////////////////////////////////////////////
稍微整理了下代码。
其中#define FRESULT_ENTRY(f) { (f), (#f) }中#f是干嘛用的啊。向坛里的弟兄们咨询下。以前也看到过这用法,没在意。这次又碰到了得搞懂才行。
谢谢了额。 #用来将f转换为字符串 学习。 1楼正解。
展开后变成:
tFresultString g_sFresultStrings[] =
{
{FR_OK, "FR_OK"},
{FR_NOT_READY,"FR_NOT_READY"},
{FR_NO_FILE,"FR_NO_FILE"},
...
};
其中FR_OK,FR_NOT_READY等是枚举FRESULT的成员,等于0,1 ... 学习了,以前从来没碰到过 字符串 没看懂~ 受教了。。。谢谢了。呼呼~~~ yplin27 发表于 2010-1-25 07:58
#用来将f转换为字符串
#用来将f转换为字符串,这个是编译器支持的吗 FRESULT_ENTRY(FR_OK)展开为{0,"FR_OK"} banye2010 发表于 2015-10-17 10:10
#用来将f转换为字符串,这个是编译器支持的吗
同问这个 huangqi412 发表于 2015-10-17 16:07
同问这个
3.宏的单行定义(少见用法)
#define A(x) T_##x
#define B(x) #@x
#define C(x) #x
我们假设:x=1,则有:
A(1)——〉T_1
B(1)——〉’1′
C(1)——〉”1″
c语言的语法,少用 好多怪异得也许我们一辈子都用不了的,语法。
页:
[1]