va_list 的 memset() 有什么含义?
What is the implication of memset() for va_list?
我阅读了以下代码片段:
va_list args;
memset(&args, 0, sizeof(va_list));
va_start(args, xxx);
...
va_end(args);
直接在va_start()
之前的memset()
是什么意思?
去掉memset()
行有什么区别?
memset
按字节设置内存。它不关心参数的类型是什么,事实上,它需要一个 void
指针。
它将dest
之后的count
个内存位置设置为字符ch
void* memset( void* dest, int ch, size_t count )
言外之意是写这个的程序员不知道自己在做什么,以浪费代码为乐。
他们可能盲目地遵循某些静态分析工具的指令,即变量必须在使用前进行初始化。
va_start(args, xxx);
进行了所有必要的初始化,并覆盖了 memset
刚刚输入的所有 0 值,使 memset
的工作变得毫无价值。
我阅读了以下代码片段:
va_list args;
memset(&args, 0, sizeof(va_list));
va_start(args, xxx);
...
va_end(args);
直接在va_start()
之前的memset()
是什么意思?
去掉memset()
行有什么区别?
memset
按字节设置内存。它不关心参数的类型是什么,事实上,它需要一个 void
指针。
它将dest
之后的count
个内存位置设置为字符ch
void* memset( void* dest, int ch, size_t count )
言外之意是写这个的程序员不知道自己在做什么,以浪费代码为乐。
他们可能盲目地遵循某些静态分析工具的指令,即变量必须在使用前进行初始化。
va_start(args, xxx);
进行了所有必要的初始化,并覆盖了 memset
刚刚输入的所有 0 值,使 memset
的工作变得毫无价值。