本文介绍了不能声明变量在所有的Windows驱动程序工具包构建环境的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个平凡的司机,像这样:
I have a trivial driver, like so:
#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;
}
一个平凡的Makefile
A trivial makefile
TARGETNAME=main
TARGETTYPE=DRIVER
MSC_WARNING_LEVEL=/W4 /WX
SOURCES=main.c
对于非繁琐的构建输出
With a non trival build output
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
如何在地球上可以这样导致错误C2143:语法错误:缺少;前型
?
并非所有declerations失败了,我似乎能够声明全局而不是局部变量。
Not all declerations fail, I seem to be able to declare globals but not local variables.
推荐答案
的问题是,微软C编译器只支持C89标准,不允许申报和code的混杂。更改为:
The problem is that Microsoft C compilers only support C89 standard, which does not permit the intermingling of declarations and code. Change to:
{
int c;
UNREFERENCED_PARAMETER(a);
UNREFERENCED_PARAMETER(b);
这篇关于不能声明变量在所有的Windows驱动程序工具包构建环境的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!