定义了一个变参的函数f,设计每一个参数按4字节对齐 
传入一个float型的参数a 
因为按值传递,编译器作出来的代码把a转成double然后压栈,这样a对应的值占8个字节,怎么告诉编译器不要这样作 
我想到的只有所有参数按指针传递,但这样取值时要多访问一次内存,请高手解答 

解决方案 »

  1.   

    用函数重载,定义完整的函数定义
    如:
    #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);
    }
      

  2.   

    回楼上的,大概是我没说清楚
    我的意思是,我定义了一个变参函数
    int Foo(int nVar1, ... );
    我调用这个函数时
    Foo(0, 1.0f, "float");
    结果压入栈的不是4字节的float 1.0而是8字节的double 1.0
    我在Foo里处理参数时是假的他们都是4字节的,所以会出错
      

  3.   

    除非特别指定,C/C++ 编译器一般会把folat自动转成double,可变参数我想没办法,只能在取值时处理成double(8字节)