0

我正在阅读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在这里使用?

4

2 回答 2

3

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

于 2013-04-14T14:01:57.523 回答
0

memset 将一块内存设置为给定值。它通常是用手工优化的汇编编写的,预计速度会非常快。

于 2017-07-23T14:43:36.200 回答