将int传递给接受int64作为输入参数的函数

时间:2013-05-17 22:19:33

标签: c

我有一个函数接受指向int64的指针并打印该值。现在,如果我从调用函数传递一个整数,它给出原始值加上额外的4个字节,因为它是一个int64并且正在传递整数。我如何处理这个问题,这样如果我将一个整数传递给接受int64的函数,仍然会打印一个整数值。

void foo(int64_t * temp) // just mentioning a simplified function
{
    printf("%llx\n",*temp); 
}

如果我尝试传递一个值为“0x12345678”的整数,那么foo函数输出的值是“xxxxxxxx12345678”,其中xxx是垃圾值。

更新: 我可以通过使用temp int64变量/指针并传递它来做到这一点,但我不能或者说不能这样做,还有其他方法吗?

3 个答案:

答案 0 :(得分:1)

如果你想要伪造编译器,那么所有的赌注都会被取消。未定义的行为和所有爵士乐。要修复它,请创建一个合适的变量并用它来调用你的函数:

int32_t x = 0x12345678;
int64_t y = x;

foo(&y);

编辑:你说你“不愿意或不愿意”做出这样的改变,但如果你想让它发挥作用你就必须这样做。

答案 1 :(得分:1)

简短的回答是否定的 - 你的函数需要一个指向64位值的指针以及你必须给它的指针。

但是,请注意,示例中没有理由传递指针 - 为什么不通过值传递参数,从而接受最多64位的任何整数类型?

void foo(int64_t temp)
{
    printf("%llx\n",temp); 
}

答案 2 :(得分:1)

如果你必须在很多地方做这件事,你可以创建一个包装函数来为你完成上述工作,例如

void foo_i64(int64_t * temp) // your original function
{
    // do stuff with that pointer
}

void foo_i(int * temp) // wrapper function
{
    int64_t t2 = *temp; // copy value
    foo_i64(&t2);
    *temp = t2; // copy value back to where we need it. There might be an overflow!
}

现在,只要有foo_i()变量进行修改/处理,就可以使用该包装函数int