能力值:
(RANK:10 )
|
-
-
2 楼
VC 2003好像没有这个提示。
最丑陋的办法是#pragma warning (disable:4035)
不想用这个可以再包装一层:
void __inline __declspec(naked) __stdcall add_wrapper()
{
__asm
{
mov eax, dword ptr[esp + 4]
add eax, dword ptr[esp + 8]
ret 8
}
}
int add(int a, int b)
{
int val(0) ;
__asm
{
push b
push a
call add_wrapper
mov val, eax
}
return val ;
}
VC也应该提供了屏蔽这个Warning的函数属性,但是我没找到。
|
能力值:
( LV4,RANK:50 )
|
-
-
3 楼
最初由 GoogleDX 发布 VC 2003好像没有这个提示。
最丑陋的办法是#pragma warning (disable:4035)
不想用这个可以再包装一层: ........
naked call 即使是 __forceinline, 编译器也不会给你内联的.
|
能力值:
(RANK:10 )
|
-
-
4 楼
最初由 dwing 发布 naked call 即使是 __forceinline, 编译器也不会给你内联的.
不知道VC里面还有这个说法,我的程序里面都是Inline一些不是很长的naked函数,都是可以内联进去的。
|
能力值:
( LV4,RANK:50 )
|
-
-
5 楼
最初由 GoogleDX 发布 不知道VC里面还有这个说法,我的程序里面都是Inline一些不是很长的naked函数,都是可以内联进去的。
你反汇编看看就知道了,VC6和VC2003都不内联naked函数.
因为编译器对内嵌的汇编代码是完全不做改动的(尊重"汇编高手"?),包括最后的ret,都内联进去程序会crash的.
|
能力值:
( LV8,RANK:130 )
|
-
-
6 楼
米办法,费事点
int sub(int a,int b)
{
int _eax;
__asm
{
mov eax,a
sub eax,b
mov _eax,eax
}
return _eax;
}
这样就米有warning了
|
能力值:
( LV4,RANK:50 )
|
-
-
7 楼
最初由 edisonH 发布 米办法,费事点 int sub(int a,int b) { int _eax; __asm { mov eax,a sub eax,b mov _eax,eax } return _eax; } 这样就米有warning了
还不如用#pragma warning(disable:4035),至少代码看上去不那么别扭.
|
能力值:
( LV9,RANK:450 )
|
-
-
8 楼
6楼的办法不错,比较适合于初学者用于理解,而不是简单的屏蔽掉警告。 我喜欢这个,虽然代码执行效率下降了。
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
使用 #pragma warning(disable:4035) 这是个简单易行的方法
不过最好就是搞完这个后再次打开4035:
#pragma warning(disable:4035)
//你的一些会有4035警告的代码
... ...
#pragma warning(default:4035)
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
将返回值存在a里
int sub(int a,int b)
{
__asm
{
mov eax,b
sub a,eax
}
return a;
}
|
能力值:
( LV8,RANK:130 )
|
-
-
11 楼
楼上的方法还不错啊
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
最初由 zzsx 发布 将返回值存在a里
int sub(int a,int b) { __asm ........
这位老兄的代码很有创意!
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
写程序难免有些(警告)可以收到预期效果就OK了。
还有你可以在编译器选项里面将编译警告去掉。
这样什么警告你将也不会看到了。
强调一点不要将函数名与汇编指令取相同名字。
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
int add(int,int);
int sub(int,int);
int sub(int a,int b)
{
__asm
{
mov eax,a
sub eax,b
}
}
int add(int a, int b)
{
__asm
{
mov eax,a
add eax,b
}
}
D:\C++\Test\Test.cpp(25) : warning C4035: 'sub' : no return value
D:\C++\Test\Test.cpp(34) : warning C4035: 'add' : no return value
Test.obj - 0 error(s), 2 warning(s)
看下你的函数原型就应该知道了..函数需要返回值....
而你就跟本没有返回任何类..所以就提示没有返回值了..
6楼的是一种很好的解决方法...如果要在汇编代码中返回就考虑,,语言的调用约定了...
|
|
|