2012-09-07 35 views
2

首先,您可以通過DDK構建實用程序成功編譯以下main.c。爲什麼DDK能夠成功編譯無效的源文件?

#include <ntddk.h> 

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

    return 0; 
} 

而且然而,請注意:

的 「離開」 和 「除」 兩者都不是有效的C語言kerwords。

我知道__leave和__except(即帶有雙下劃線的下劃線)都是特定於Microsoft的關鍵字,用於擴展C語言,但「leave」和「except」不是。

我也確認「leave」和「except」不是由宏定義的。 MSDN對此沒有解釋。

誰能給我一個解釋?提前致謝。

+2

我發現它們在'inc \ api \ warning.h'中定義爲宏。但是,關於它的文檔並不多。 – Rohan

+0

羅漢,非常感謝你。 – xmllmx

+0

DDK不編譯任何東西:編譯器。 – EJP

回答

3

正如Rohan指出的那樣,它們是由宏定義的warning.h。這些定義是爲了向後兼容使用非下劃線版本的舊代碼。

相關問題