积分文字常数的默认大小

时间:2010-12-23 21:43:03

标签: c

void foo(void* arg)
{

}

int main(int argc, char** argv)
{
  foo((void*)1);
  return 0;
}

编译器要满足哪些标准来定义传递给foo的整数文字常量的默认大小(以字节为单位)?

2 个答案:

答案 0 :(得分:2)

没有。只有函数所期望的参数大小,它显然是指针的大小(i386上为4,x86_64上为8等)。另请参阅calling convention wiki。

答案 1 :(得分:2)

你没有将整数文字常量传递给foo;您传递的是void *,其定义为sizeof(void *)

更一般地说,如果你将整数常量表达式作为参数传递给函数,那么有两种可能性:

  • 你有一个功能的原型;在这种情况下,整数常量表达式在函数调用之前转换为相应参数的声明类型。
  • 你没有该函数的原型,或者它是一个可变参数;在这种情况下,参数将作为int传递。 ( caf 正确地指出,这不适用于排名高于int的整数常量表达式,例如35U-17L