C sizeof()语句是在编译时还是运行时计算的?

C sizeof()语句是在编译时还是运行时计算的?,c,runtime,sizeof,compile-time,C,Runtime,Sizeof,Compile Time,有这样的东西是在浪费内存吗 static const char size = sizeof(struct MyStruct); 如果在编译时对它们进行评估,那就像这样 static const char size = 10; functioncall(size); functioncall2(size); 哪一个更为理想: #define STRUCTSIZE sizeof(struct MyStruct) 或 如果在编译时计算sizeof,则在运行时为常量值分配额外内存。如果在编译时对其

有这样的东西是在浪费内存吗

static const char size = sizeof(struct MyStruct);
如果在编译时对它们进行评估,那就像这样

static const char size = 10;
functioncall(size);
functioncall2(size);
哪一个更为理想:

#define STRUCTSIZE sizeof(struct MyStruct)

如果在编译时计算sizeof,则在运行时为常量值分配额外内存。如果在编译时对其进行计算,我还可以使用宏来提高内存效率。但是,如果在运行时对它们进行求值,这个变量将节省处理能力,因为在我使用它时,它不必反复求值。所以sizeof语句是在编译时还是运行时计算的

在C语言中,sizeof语句是在编译时还是运行时计算的

通常是的。但是,当应用于可变长度数组时,将在运行时对其进行计算。否则,将根本不计算操作数表达式,只使用表达式的类型来确定结果


在这种情况下,使用宏代替变量没有任何好处。请注意,使用该变量也不是必需的,并且可能会混淆程序。然而,这主要是一个风格问题static const char size = sizeof(struct MyStruct);