int DoParityEven();
int DoParityOdd();
unsigned char global;
int __declspec(naked) DoParityEither()
{
   __asm
   {
      test global,0
      jpe SHORT DoParityEven  //出错
      jmp SHORT DoParityOdd   //出错
   }
}使用这句内嵌汇编会报short jump to function converted to near 这个危险信息
请问该怎么改呢

解决方案 »

  1.   

    用call,转跳好像无法执行其他函数
      

  2.   

    jmp far ptr 、jmp dword ptr或 call 都可以
    jmp SHORT 是短跳转,当然跳不到函数地址了
      

  3.   

    前面加上预编译信息#pragma warning (disable : 4414)
      

  4.   

    shor跳转是±128(严格说是+127,-128)字节长度内的跳转.而在DEBUG模式下像int DoParityEven();这样声明的函数一般会因为最小生成而使用一个跳转表寻址,一般远离于调用处,所以编译器给你警告信息.
    直接使用
    jmp far ptr [DoParityEven],
    jmp dword ptr [DoParityEven],mov eax, [DoParityEven]
    jmp eax
    均可.
      

  5.   

    没有注意看 __declspec(naked) ,用jmp SHORT 应该没有问题