能力值:
( LV2,RANK:10 )
|
-
-
2 楼
看看 了解下知识
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
似乎是宏方便些 然后由于宏在运行时会解压(术语忘了) 很占内存 大概就这样 百度好多资料
宏和函数交替使用嘛~~
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
我晕了,分析有理呀
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
宏是在编译的时候,自动替换的。相当于符号级别的等量置换。而函数是有调用关系的,需要传入具体参数,传出具体参数,返回值之类的。另外在宏里的代码是直接编到程序里。在程序里已经看不到宏的符号了。而函数是在程序里实实在在存在的,是在堆上可以运行的。
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
这个主要看一下汇编应该就理解两者区别了
|
能力值:
( LV4,RANK:40 )
|
-
-
7 楼
可否贴出例程?给出解释?我分析老是找不到main函数在哪,没法分析。
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
#include <stdio.h>
#define ADD(a,b) a+b
int fun(int a,int b)
{
return a+b;
}
int main()
{
int a = 1,b = 2;
int sum = 0;
sum= fun(a,b);
sum = 0;
sum = ADD(a,b);
return 0;
}
反汇编
8: int main()
9: {
0040D490 push ebp
0040D491 mov ebp,esp
0040D493 sub esp,4Ch
0040D496 push ebx
0040D497 push esi
0040D498 push edi
0040D499 lea edi,[ebp-4Ch]
0040D49C mov ecx,13h
0040D4A1 mov eax,0CCCCCCCCh
0040D4A6 rep stos dword ptr [edi]
10: int a = 1,b = 2;
0040D4A8 mov dword ptr [ebp-4],1
0040D4AF mov dword ptr [ebp-8],2
11: int sum = 0;
0040D4B6 mov dword ptr [ebp-0Ch],0
12: sum= fun(a,b);
0040D4BD mov eax,dword ptr [ebp-8]
0040D4C0 push eax
0040D4C1 mov ecx,dword ptr [ebp-4]
0040D4C4 push ecx
0040D4C5 call @ILT+10(fun) (0040100f)
0040D4CA add esp,8
0040D4CD mov dword ptr [ebp-0Ch],eax
13: sum = 0;
0040D4D0 mov dword ptr [ebp-0Ch],0
14: sum = ADD(a,b);
0040D4D7 mov edx,dword ptr [ebp-4]
0040D4DA add edx,dword ptr [ebp-8]
0040D4DD mov dword ptr [ebp-0Ch],edx
15:
16: return 0;
0040D4E0 xor eax,eax
17: }
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
sum= fun(a,b);
0040D4BD mov eax,dword ptr [ebp-8]
0040D4C0 push eax
0040D4C1 mov ecx,dword ptr [ebp-4]
0040D4C4 push ecx
0040D4C5 call @ILT+10(fun) (0040100f)
0040D4CA add esp,8
0040D4CD mov dword ptr [ebp-0Ch],eax
这些是函数部分的汇编
: sum = ADD(a,b);
0040D4D7 mov edx,dword ptr [ebp-4]
0040D4DA add edx,dword ptr [ebp-8]
0040D4DD mov dword ptr [ebp-0Ch],edx
这是那个宏
|