我正在阅读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
?
答案 0 :(得分:3)
看起来rargs
是包含程序选项的某种结构。 CLEARS()
和memset()
用于填充具有零值的结构以启动它。
答案 1 :(得分:0)
memset将内存块设置为给定值。 它通常是手动优化的装配,预计会非常快。