memset() 对 va_list 的含义是啥?

Posted

技术标签:

【中文标题】memset() 对 va_list 的含义是啥?【英文标题】:What is the implication of memset() for va_list?memset() 对 va_list 的含义是什么? 【发布时间】:2017-01-11 09:25:47 【问题描述】:

我阅读了以下代码片段:

va_list args;
memset(&args, 0, sizeof(va_list));

va_start(args, xxx);
...
va_end(args);

memset()va_start()之前的含义是什么?

如果去掉memset() 行有什么区别?

【问题讨论】:

它用零填充args 变量。 你在哪里找到这个代码?我认为这是没用的,因为va_start之后写args 有趣。 va_start(args, xxx); 不会看起来像初始化 args 一样多于 foo(args) 不会影响 main()args。然而va_start 是一个宏并且确实会影响args 【参考方案1】:

这意味着编写此代码的程序员不知道自己在做什么,并且喜欢浪费代码。

他们可能会盲目地遵循某些静态分析工具的指令,即变量必须在使用之前进行初始化。

va_start(args, xxx); 进行所有必要的初始化,并覆盖 memset 刚刚输入的所有 0 值,使 memset 的工作毫无价值。

【讨论】:

【参考方案2】:

memset 按字节设置内存。它不关心参数的类型是什么,实际上它需要一个void 指针。

它将在dest之后将count的内存位置数量设置为字符ch

void* memset( void* dest, int ch, size_t count )

【讨论】:

以上是关于memset() 对 va_list 的含义是啥?的主要内容,如果未能解决你的问题,请参考以下文章

C语言va_list变量_printf

前面声明过va_list ap;后面出现了va_start (ap, fmt),va_arg (ap, int)。fmt 和 int 是啥参数啊?

在结构元素上使用 memset 的正确方法是啥?

ref、val 和 out 对方法参数的含义是啥?

c语言中函数memset()是啥意思?啥功能

va_list arg_list va_start(arg_list, format) va_end( arg_list ) 原理的理解