Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么DDK可以成功编译无效的源文件?_C_Windows_Compiler Construction_Driver_Wdk - Fatal编程技术网

C 为什么DDK可以成功编译无效的源文件?

C 为什么DDK可以成功编译无效的源文件?,c,windows,compiler-construction,driver,wdk,C,Windows,Compiler Construction,Driver,Wdk,首先,您可以通过DDK构建实用程序成功编译以下main.c #include <ntddk.h> NTSTATUS DriverEntry(PDRIVER_OBJECT, PUNICODE_STRING) { try { leave; } except (1) { } return 0; } #包括 NTSTATUS DriverEntry(PDRIVER\u对象,PUNICODE\u字符串) { 尝试 {

首先,您可以通过DDK构建实用程序成功编译以下main.c

#include <ntddk.h>

NTSTATUS DriverEntry(PDRIVER_OBJECT, PUNICODE_STRING)
{
    try
    {
        leave;
    }
    except (1)
    {
    }

    return 0;
}
#包括
NTSTATUS DriverEntry(PDRIVER\u对象,PUNICODE\u字符串)
{
尝试
{
离开
}
第(1)款除外
{
}
返回0;
}
但是,请注意:

“leave”和“except”都不是有效的C语言单词

我知道uuu leave和uuu except(即带双前导下划线)都是microsoft特定的关键字,用于扩展C语言,但“leave”和“except”不是

我还确认宏没有定义“离开”和“除外”。MSDN对此没有任何解释


谁能给我一个解释?提前感谢。

正如Rohan所指出的,它们是由
warning.h
中的宏定义的。这些定义是为了与使用非下划线版本的旧代码向后兼容。

我发现它们在
inc\api\warning.h
中定义为宏。但是,关于它的文档并不多。DDK不编译任何东西:编译器编译。