Cod*_*der 9 c c++ windows initialization
码:
WINDOWPLACEMENT wplcmt = {sizeof(WINDOWPLACEMENT)};
Run Code Online (Sandbox Code Playgroud)
看起来比以前更清洁:
WINDOWPLACEMENT wplcmt;
memset(&wplcmt, 0, sizeof(WINDOWPLACEMENT));
wplcmt.length = sizeof(WINDOWPLACEMENT);
Run Code Online (Sandbox Code Playgroud)
这个东西的组装输出也非常好,对于更长的结构,MSVC甚至使用memset
而不是xor eax, eax
和mov
.从标准的角度来看,它看起来也不错.但我仍然害怕结构没有紧密包装的边界情况说#pragma pack(128)
,窗户突然决定做一个结构的memcmp.
那么使用这样的语法是好还是坏?使用这种初始化是一种好习惯吗?
你展示的第二个代码,
WINDOWPLACEMENT wplcmt;
memset(&wplcmt, 0, sizeof(WINDOWPLACEMENT));
wplcmt.length = sizeof(WINDOWPLACEMENT);
Run Code Online (Sandbox Code Playgroud)
太可怕了.混淆,效率低下,冗长,你把它全部塞进去了.
第一个代码段,
WINDOWPLACEMENT wplcmt = {sizeof(WINDOWPLACEMENT)};
Run Code Online (Sandbox Code Playgroud)
除了混淆之外,它是首选方式,除非您愿意
花更多时间不必要地编写更多代码,
让读者花更多时间阅读并不必要地分析你的详细代码,
执行效率降低,并且
提供bug入口门户.
顺便问一下,你使用过的混淆名称是什么wplcmt
?
你为什么要混淆名字?
你的问题是真的还是只是拖钓?
干杯&hth.,
编辑:问题已被编辑.上述问题是对原始标题/问题"这种结构分配有多邪恶?"的回应.我将离开我的答案,为评论提供背景信息.
编辑2:情境进一步发生变化:OP的缺口从"狂人"变为"编码器".因此,虽然原作是关于"如何eveil是"正常代码的"狂人",它现在是"Coder"的"它是首选......".哦,我的意思是,我不是在评论中称他为"狂人",因为它现在会出现; 这就是他所谓的自己,当时他的昵称.
归档时间: |
|
查看次数: |
557 次 |
最近记录: |