在C中memset的目的是什么

时间:2013-04-14 13:58:07

标签: c memset

我正在阅读REBOL源代码,我无法理解以下声明的目的:

/***********************************************************************
**
*/  int main(int argc, char **argv)
/*
***********************************************************************/
{
    char *cmd;

    // Parse command line arguments. Done early. May affect REBOL boot.
    Parse_Args(argc, argv, &Main_Args);

    Print_Str("REBOL 3.0\n");

    REBOL_Init(&Main_Args);

    // Evaluate user input:
    while (TRUE) {
        cmd = Prompt_User();
        REBOL_Do_String(cmd);
        if (!IS_UNSET(DS_TOP)) {
            //if (DSP > 0) {
                if (!IS_ERROR(DS_TOP)) {
                    Prin("== ");
                    Print_Value(DS_TOP, 0, TRUE);
                } else
                    Print_Value(DS_TOP, 0, FALSE);
            //}
        }
        //DS_DROP; // result
    }

    return 0;
}

在Parse_Args函数中:

/***********************************************************************
**
*/  void Parse_Args(int argc, REBCHR **argv, REBARGS *rargs)
/*
**      Parse REBOL's command line arguments, setting options
**      and values in the provided args structure.
**
***********************************************************************/
{
    REBCHR *arg;
    REBCHR *args = 0; // holds trailing args
    int flag;
    int i;

    CLEARS(rargs);

    ....

明确了CLEARS:

#define CLEARS(m)       memset((void*)(m), 0, sizeof(*m));

所以我的问题是为什么在这里使用memset

2 个答案:

答案 0 :(得分:3)

看起来rargs是包含程序选项的某种结构。 CLEARS()memset()用于填充具有零值的结构以启动它。

答案 1 :(得分:0)

memset将内存块设置为给定值。 它通常是手动优化的装配,预计会非常快。