定义了一个变参的函数f,设计每一个参数按4字节对齐
传入一个float型的参数a
因为按值传递,编译器作出来的代码把a转成double然后压栈,这样a对应的值占8个字节,怎么告诉编译器不要这样作
我想到的只有所有参数按指针传递,但这样取值时要多访问一次内存,请高手解答
传入一个float型的参数a
因为按值传递,编译器作出来的代码把a转成double然后压栈,这样a对应的值占8个字节,怎么告诉编译器不要这样作
我想到的只有所有参数按指针传递,但这样取值时要多访问一次内存,请高手解答
解决方案 »
- 编译没错,一调试就出现Unhandled exception in chat.exe: 0xC0000005: Access Violation.
- 求助!!!Windows和Linux下的语音对讲功能
- 请问这种界面是如何实现的?
- 获取系统图标出了问题,大家来分析分析啊
- 我就用vc++6.0,请问安装MSDN2003要全安装了吗?其实大家平时能用到的是那部分呢?还是只安装里面的个MSDN文档就够了呢。
- vc如何生成dll能够让所有的语言都能使用
- 如何读取一个大文本文件中倒数N行或者指定行数的数据?
- 不能响应鼠标消息
- 请指点这个连接的错误.
- 大家猜一下下面代码的运行结果,我实在不明白!!!
- 关闭Recordset出错
- 字符的转换函数CSting to WCHAR
如:
#include <stdio.h>
float f(float x)
{
printf("this is using float\n");
return x;
}
double f(double x)
{
printf("this is using double\n");
return x;
}
main()
{
float x;
double y;
x=f((float)1.0);
y=f((double)1.0);
}
我的意思是,我定义了一个变参函数
int Foo(int nVar1, ... );
我调用这个函数时
Foo(0, 1.0f, "float");
结果压入栈的不是4字节的float 1.0而是8字节的double 1.0
我在Foo里处理参数时是假的他们都是4字节的,所以会出错