我在我的程序里导入msado.dll库就会出现警告,请高手解答,送上少少50分(我分不多了!)以表心意。详情如下:导入:
#import "c:\Program Files\Common Files\System\ado\msado.dll"  no_namespace rename("EOF","adoEOF")  rename("BOF","adoBOF") 出现警告:C:\Program Files\microsoft Visual Studio\myprojects\ado\debug\msado15.tlh(407):Warning C4146:Unary minus operator applied to unsigned type ,result still unsigned 双击警告,进入编译程序生成的文件msado.tlh中,提示警告出现的行:adCreateStructDoc:-2147483648;我查了一下msdn,该警告应该是没有给声明的变量赋值,只是在它前面加一个负号,如:int i;
-i;这第二 个语句就会出现这样的警告。这下我就搞不懂了,请高手指点一二,不甚感激。

解决方案 »

  1.   

    stdafx.h里加一句:#pragma warning(disable:4146)
      

  2.   

    msdn中有关于这个警告的介绍,并建议我们不必理会这样的警告,你可以看看。
      

  3.   

    编译器警告(等级 2)C4146一元负运算符应用于无符号类型,结果仍为无符号类型
    无符号类型只能保存非负值,所以一元负(非)应用于无符号类型时通常无意义。操作数和结果都是非负的。
    实际上,当程序员试图表达最小整数值 -2147483648 时,发生此问题。该值不能写为 -2147483648,因为表达式处理分两个步骤: 
    计算数字 2147483648。因 2147483648 大于最大整数值 2147483647,所以其类型不是 int,而是 unsigned int。 
    将一元负应用于该值,得到无符号结果,该结果碰巧是 2147483648。 
    无符号类型的结果可能导致意外行为。如果在比较中使用该结果,则可使用无符号比较,例如另一个操作数是 int 时。这解释了下面的示例程序只输出一行的原因。
    预期的第二行为 1 is greater than the most negative int,但未输出,因为 ((unsigned int)1) > 2147483648 为假。
    可以通过从 Limits.h 使用 MIN_INT 来避免 C4146 警告,该 MIN_INT 有 signed int 类型。
    下面的示例生成 C4146:
    // C4146.cpp
    // compile with: /W2
    #include <stdio.h>
    void check(int i)
    {
        if (i > -2147483648)   // C4146
          printf("%d is greater than the most negative int\n", i);
    }int main()
    {
        check(-100);
        check(1);
    }