3

次のような単純なドライバーがあります。

#include <ntddk.h>

NTSTATUS DriverEntry(__in DRIVER_OBJECT* a, __in UNICODE_STRING* b)
{
    UNREFERENCED_PARAMETER(a);
    UNREFERENCED_PARAMETER(b);

    int c; // this fails the build

    return 0;
}

簡単なメイクファイル

TARGETNAME=main
TARGETTYPE=DRIVER
MSC_WARNING_LEVEL=/W4 /WX
SOURCES=main.c

非自明なビルド出力

C:\Test>pushd %cd%

C:\Test>C:\WinDDK\7600.16385.1\bin\setenv.bat C:\WinDDK\7600.16385.1 fre x64 wnet
WARNING: x64 Native compiling isn't supported. Using cross compilers.
Launching OACR monitor

C:\WinDDK\7600.16385.1>popd

C:\Test>build

BUILD: Compile and Link for AMD64
BUILD: Loading c:\winddk\7600.16385.1\build.dat...
BUILD: Computing Include file dependencies:
BUILD: Start time: Thu Jan 17 10:57:58 2013
BUILD: Examining c:\test directory for files to compile.
BUILD: Saving c:\winddk\7600.16385.1\build.dat...
BUILD: Compiling and Linking c:\test directory
Configuring OACR for 'root:amd64fre' - <OACR on>
_NT_TARGET_VERSION SET TO WS03
Compiling - main.c
1>errors in directory c:\test
1>c:\test\main.c(9) : error C2143: syntax error : missing ';' before 'type'
Linking Executable - objfre_wnet_amd64\amd64\main.sys
1>link : error LNK1181: cannot open input file 'c:\test\objfre_wnet_amd64\amd64\main.obj'
BUILD: Finish time: Thu Jan 17 10:57:58 2013
BUILD: Done

    3 files compiled - 1 Error
    1 executable built - 1 Error

一体どうやってこれが結果になるのerror C2143: syntax error : missing ';' before 'type'でしょうか?

すべての宣言が失敗するわけではありません。グローバル変数は宣言できますが、ローカル変数は宣言できないようです。

4

1 に答える 1

6

問題は、Microsoft C コンパイラが C89 標準のみをサポートしているため、宣言とコードの混在が許可されていないことです。への変更:

{
    int c;

    UNREFERENCED_PARAMETER(a);
    UNREFERENCED_PARAMETER(b);
于 2013-01-17T10:52:27.223 に答える