enum RecordCreateOptionsEnum
{
adCreateCollection = 8192,
adCreateStructDoc = -2147483648,
adCreateNonCollection = 0,
adOpenIfExists = 33554432,
adCreateOverwrite = 67108864,
adFailIfNotExists = -1
};
红色的那句出现如下警告
warning C4146: unary minus operator applied to unsigned type, result still unsigned是什么意思?
{
adCreateCollection = 8192,
adCreateStructDoc = -2147483648,
adCreateNonCollection = 0,
adOpenIfExists = 33554432,
adCreateOverwrite = 67108864,
adFailIfNotExists = -1
};
红色的那句出现如下警告
warning C4146: unary minus operator applied to unsigned type, result still unsigned是什么意思?
enum 类型的量最好使用默认值
enum RecordCreateOptionsEnum
{
adCreateCollection = 8192,
adCreateStructDoc = -2147483648,
adCreateNonCollection = 0,
adOpenIfExists = 33554432,
adCreateOverwrite = 67108864,
adFailIfNotExists = -1
}; 其中,绝对值最大是2147483648.已经需要16bit才能存储了,无法再添加符号位。你可以试一下adCreateStructDoc = -2147483647.具体请参考参考自Bjarne Stroustrup的 The C++ Programming Languane 中4.8 Enumerations [dcl.enum]
一节。
自己屏蔽掉这个warning就可以了
在import之前屏蔽掉他
#pragma warning(push)
#pragma warning(disable:4146)
#import "c:\program files\common files\system\ado\msado15.dll" rename("EOF","adoEOF")
using namespace ADODB; //使用ADO名字空间
#pragma warning(pop)
警告说明,语句含义可能与你的实际目的不同.
adCreateStructDoc=2147483648;//去掉符号就可以了.
C99规定,所有的数字常量都是以数字打头的的,也就是,编译器看到-2147483648,它并不认为一个数值,而是一个数值表达式
事实上它认为是是2147483648加上了一元负运算符‘-’
因为signed int的范围是[-2147483648, 2147483647],2147483648超过了int的上限,编译器认为这是个unsigned,但是unsigned却用了取负运算,这是不合理的,所以报warnig跟最后算得的值是多少没关系,你写成adCreateStructDoc = -2147483648 + 100 一样报warnig