VC中定义变量名的陷阱

        笔者最近作开发,适用MSVC 6.0作为开发工具。刚开始核心算法部分采用console形式,没出现什么问题。
后来决定将核心部分封装到win32 DLL,可是这个时候问题就出现了。编译器总是提示一个enum类型定义
有问题,由于涉及到N多的头文件,搞的焦头烂额,因为同样的头文件放在console形式的工程下面就没有
问题。

        后来偶然发现,只要将enum里面定义的几个项的名字改一下就没有问题了,出问题的几个项是IN、
OUT、PURE。为什么会出这个问题呢,后来才搞清楚,console仅仅是调用了常用的IO库,而win32 DLL需要
调用windows.h头文件,后者又包含了大量的windows头文件,而这些头文件里已经将IN、OUT等关键字用上
了,这就是问题所在,但是VC的编译器提示却晦涩不明,让人看不懂到底出了什么问题,实在让人气愤。
为了说明问题,做了一个小例子,如下:

#include <windows.h>
#include <iostream>

using namespace std;

enum myenum
{
        AAA=1,
        BBB=2,
        CCC=3,
        IN=4,
        OUT=5,
        PURE=6
};

int main()
{
        for(int i=0; i<10; i++)
        {
                cout<<i<<endl;
        }
        myenum my1;
        my1=OUT;

        return 1;
}
VC 6.0输出如下编译错误信息,VC7.1的输出信息类似,也强不到哪里去,各位看看是不是很晦涩:
D:/testKEY/testKEY.cpp(11) : error C2059: syntax error : '='
D:/testKEY/testKEY.cpp(14) : error C2143: syntax error : missing ';' before '}'
D:/testKEY/testKEY.cpp(14) : error C2143: syntax error : missing ';' before '}'
D:/testKEY/testKEY.cpp(23) : error C2059: syntax error : ';'
相比较而言,mingw提示的稍微明确一点,说没有合格的标识符,至少指明了努力的方向:
testKEY.cpp:11: error: expected identifier before '=' token
testKEY.cpp:11: error: expected `}' before '=' token
testKEY.cpp:11: error: expected unqualified-id before '=' token
testKEY.cpp:11: error: expected `,' or `;' before '=' token
testKEY.cpp:14: error: expected declaration before '}' token

        解决方法很简单,把IN、OUT、PURE改一下,比如__IN__、__OUT__、__PURE__;或者去掉对windows.h的引用。鉴于这个问题困扰了我一天,鄙视微软一下,也望大家引以为戒,千万不要定义过于soso的标识符,免得冲突。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值