参数值的传递不是函数的任务!函数名仅仅标示着一段执行代码的地址!为了说明这个事实,我定义了一个简单的max函数,返回最大值
int max(int a, int b)
然后定义了一个(没有参数,返回值为整型的)函数指针指向max函数。
采用内联汇编为max指向的那段执行代码传递参数,成功打印了最大值。
源码如下
// file : maxnum.c
//
// command line: gcc -o maxnum maxnum.c
// command line: ./maxnum
#include
int max(int a, int b)
{
return (a >= b ? a : b);
}
int main()
{
int (*func)() = &max;
int num1 = 20;
int num2 = 50;
int result = 0;
asm volatile
(
"movl %1, 4(%%esp) \n\t"
"movl %0, (%%esp)"
:: "r"(num1), "r"(num2)
);
result = (*func)();
printf("max num is %d\n", result);
return -1;
}
输出
max num is 50