关于 C 语言中内联汇编 _asm int 3 编译失败的问题?
学习驱动开发, 需要在DEBUG版本的驱动中做一个手工的中断, 便于用WINDBG调试.
结果在以下代码中加了一个 _asm int 3 语句 (size_t i 位于 _asm int 3 之后), WDK 始终编译报错,
error C2143: syntax error : missing ';' before 'type'
error C2065: 'i' : undeclaredidentifier
多次尝试之后, 将局部变量的定义语句, 移到了汇编语句之前, 结果就编译成功了.
WHY?? 这个太奇怪了, 不知道哪位大侠能指点一下??
NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path)
{
//编译成功
size_t i; //局部变量定义必须放在 _asm int 3 之前
#if DBG
_asm int 3
#endif
//编译报错
size_t i; //局部变量定义必须放在 _asm int 3 之前
// 所有的分发函数都设置成一样的。
for(i=0;i<IRP_MJ_MAXIMUM_FUNCTION;i++)
{
driver->MajorFunction[i] = ccpDispatch;
}
// 支持动态卸载。
driver->DriverUnload = ccpUnload;
// 绑定所有的串口。
ccpAttachAllComs(driver);
// 直接返回成功即可。
return STATUS_SUCCESS;
}