如果 sizeof() 不在运行时评估,并且可变参数宏是可能的,我想知道对于任意基本类型列表,宏是否可以评估组合大小。
举个例子,我知道可以这样做:
#define sizeof_x(x) sizeof(x)
int main()
{
printf("%d", sizeof_x(int));
return 0;
}
它将返回 4。我想知道是否可以使用下面这样的宏:
sizeof_types(int, int, double)
sizeof_types(int, char)
sizeof_types(float, float, float)
或者如果我必须为我可以传递的每个参数手动定义一个宏
我尝试使用可变参数并期望它们将类型作为参数,但这不起作用
宏不能按顺序处理它的每个参数,预处理器中没有这样的东西。事实上,参数本身必须被视为宏扩展后提供给实际编译器的文本。
因此,c 预处理器无法计算任何这些参数上的
sizeof
运算符,而只能根据它们进行调整...但由于预处理器上没有循环能力,因此无法生成所需的文本。
与此无关,请注意,因为编译器通常会应用对齐并跳过字段之间的一些数据来执行此操作。