我读了下面的代码片段:memset()对va_list的含义是什么?
va_list args;
memset(&args, 0, sizeof(va_list));
va_start(args, xxx);
...
va_end(args);
什么是memset()
这里va_start()
之前直接意味着什么呢?
如果memset()
行被删除,有什么区别?
我读了下面的代码片段:memset()对va_list的含义是什么?
va_list args;
memset(&args, 0, sizeof(va_list));
va_start(args, xxx);
...
va_end(args);
什么是memset()
这里va_start()
之前直接意味着什么呢?
如果memset()
行被删除,有什么区别?
言外之意是,是谁写的这个程序员不知道自己在做什么,并享有浪费代码。
他们可能会盲目地遵循某些静态分析工具的指示,即变量在使用前必须进行初始化。
va_start(args, xxx);
会进行所有必要的初始化操作,并覆盖所有刚刚输入的0值,使得memset
的工作毫无价值。
memset
以字节方式设置存储器。它不关心参数的类型,事实上,它需要一个void
指针。
它将dest
后置count
的存储单元没有的字符ch
void* memset(void* dest, int ch, size_t count)
它用零填充'args'变量。 –
你从哪里找到这段代码?我觉得'va_start'写在'args'之后是没用的。 – Boiethios
有趣。 'va_start(args,xxx);''不会_look_ like正在初始化'args',而不会影响'main()'''args'。然而'va_start'是一个宏,并影响'args'。 – chux