我最近在试验SendInput
并发现一切都按预期工作,而没有为结构分配其他值
#include <Windows.h>
int main(int argc, char *argv[]) {
INPUT input;
input.type = 1;
input.ki.wVk = 0x41;
SendInput(1, &input, sizeof(INPUT));
return EXIT_SUCCESS;
}
如果您查看我正在使用的INPUT
结构的MSDN定义,它有许多其他变量(type
和wVk
除外,这是我唯一的变量设定)。
为该结构中的所有其他字段添加类似于input.ki.dwExtraInfo = 0;
的内容是否有任何意义?我假设,默认情况下,当您分配结构时,它会将零写入内存,因此设置这些变量没有意义吗?
答案 0 :(得分:3)
本地变量(以及本地结构变量的扩展成员)未初始化,因此尝试读取或写入它们会导致未定义的行为。
在这种情况下它恰好起作用,但你不能依赖它。
话虽这么说,这个结构的字段可能都是0,因为它是main
函数的本地字段,进程的内存可能在它启动之前被清除,并且变量不会消失程序生命周期范围,因此它在堆栈上使用的空间不被其他任何东西使用。
但同样,这是一个不能依赖的实现细节。因此最好显式初始化所有值。
答案 1 :(得分:0)
您不必分配变量,但我认为更好的做法是实例化为0
或null
,并在您get
的过程中设置检查点这些变量。在我看来,它使你的代码更加健壮,因为你永远不会忘记忘记实例化的内容以及什么不是。
此外,默认情况下,如果未实例化某个值,则不会将其写入内存。