编程知识与16位Windows编程示例解析
1. 代码示例与警告的重要性
在编程过程中,我们会遇到各种各样的代码和潜在问题。例如下面这段汇编代码:
mov ecx, DWORD PTR R$[rsp]
mov DWORD PTR [rax], ecx
mov rax, QWORD PTR rt$[rsp]
mov ecx, DWORD PTR G$[rsp]
mov DWORD PTR [rax+4], ecx
mov rax, QWORD PTR rt$[rsp]
mov ecx, DWORD PTR B$[rsp]
mov DWORD PTR [rax+8], ecx
add rsp, 56
; RAX didn't change down to this point
ret
0
create_color ENDP
优化后的MSVC 2015 x64会内联函数,但生成的代码可能会崩溃。另外,像下面这个C语言函数:
uint32_t LPHM_u32_hash(void *key)
{
jenkins_one_at_a_time_hash_u32((uint32_t)key);
}
这里缺少返回语句,编译器可能会在这一点上默默地不做任何处理。这种未被注意到的错误可能会带来很大的麻烦。所以,编程时警告非常重要,要使用 -Wall
等编译选项。同时,“霰弹枪式调试”(shotgun debugging)不可取,因为这样可能会让错误被忽略。