win100 发表于 2010-1-25 00:11:44

这是啥意思额???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是干嘛用的啊。向坛里的弟兄们咨询下。以前也看到过这用法,没在意。这次又碰到了得搞懂才行。
谢谢了额。

yplin27 发表于 2010-1-25 07:58:00

#用来将f转换为字符串

Excellence 发表于 2010-1-25 08:20:18

学习。

mshicom 发表于 2010-1-25 08:32:47

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 ...

cat_li 发表于 2010-1-25 08:46:28

学习了,以前从来没碰到过

zclcom79 发表于 2010-1-25 09:49:34

字符串

cinderellah 发表于 2010-1-25 10:04:17

没看懂~

win100 发表于 2010-1-25 19:02:06

受教了。。。谢谢了。呼呼~~~

banye2010 发表于 2015-10-17 10:10:37

yplin27 发表于 2010-1-25 07:58
#用来将f转换为字符串

#用来将f转换为字符串,这个是编译器支持的吗

default 发表于 2015-10-17 10:33:26

FRESULT_ENTRY(FR_OK)展开为{0,"FR_OK"}

huangqi412 发表于 2015-10-17 16:07:17

banye2010 发表于 2015-10-17 10:10
#用来将f转换为字符串,这个是编译器支持的吗

同问这个

banye2010 发表于 2015-10-17 16:45:17

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语言的语法,少用

xly2014 发表于 2016-2-11 23:06:45

好多怪异得也许我们一辈子都用不了的,语法。
页: [1]
查看完整版本: 这是啥意思额???TI的LM3S8962SD卡代码上的一段程序