Windows版本宏的定义引起的编译错误

1 问题引入

使用VC++6.0编写程序时,使用一个名为“InitializeCriticalSectionAndSpinCount”的函数,该函数的作用是初始化临界节和自旋锁的数量。

在进行程序编译时,报如下错误:

error C2065:’InitializeCriticalSectionAndSpinCount’:undeclare identifier

该函数所在头文件是Winbase.h”,库函数是“Kernel32.lib”。在程序中添加头文件和库函数之后,依然报错。

2 问题分析

Winbase.h”中找到对“InitializeCriticalSectionAndSpinCount”函数声明的位置,发现有如下代码

#if (_WIN32_WINNT >= 0x0403)

//之后为InitializeCriticalSectionAndSpinCount()函数的声明代码

产生以上问题的原因是没有对_WIN32_WINNT赋值,所以导致该函数没有声明。

3 问题解决

在自己编写程序的StdAfx.h中添加如下代码:

#define _WIN32_WINNT 0x5000

之后再次编译,编译成功。

4 问题扩展

4.1 预处理器变量

#define指示接受一个名字并定义该名字为预处理器变量。预处理器变量的名字在程序中必须是唯一的。任何与预处理器变量相匹配的名字的使用都关联到该预处理器变量。所以,在自己编写的StdAfx.h中定义的_WIN32_WINNT与在winbase.h中用到的_WIN32_WINNT是同一个预处理器变量。

4.2 Windows版本宏

_WIN32_WINNTWindows版本宏,除了_WIN32_WINNT之外,Windows版本宏还包括了_WIN32_WINDOWSWINVER。对于Windows95/98/MeWindows的版本宏是_WIN32_WINDOWS,对于Windows2000/XP/Server2003/Vista/Server2008 /Win7/Win8来说,Windows的版本宏是_WIN32_WINNT,而WINVER_WIN32_WINNT的别名。

系统名

系统版本号

Windows 2000

0x0500

Windows XP

0x0501

Windows  Server 2003

0x0502

Windows Vista

0x0600

Windows Server 2008

0x0600

Windows 7

0x0601

Windows 8

0x0602

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值