typedef(指向)VLA 是否需要计算大小表达式?
typedef VLA 是否需要计算大小表达式?
int f(void);
int main(void)
{
typedef int (T) [ f() ]; // is f required to be evaluated ?
T x;
return sizeof x;
}
typedef 指向 VLA 的指针是否需要计算大小表达式?
int f(void);
int main(void)
{
typedef int (*T) [ f() ]; // is f required to be evaluated ?
T x;
return sizeof x;
}
UPD。在f
的定义中是可见的,那么对它的调用可能会被优化掉:
int f(void)
{
return 4;
}
int main(void)
{
typedef int (*T) [ f() ];
return sizeof(T);
}
生成的代码(GCC和LLVM):
main:
mov eax, 8
ret
这是预期的,因为没有真正需要调用f
确定指针的大小。
Does typedef VLA require evaluation of the size expression?
int f(void);
int main(void)
{
typedef int (T) [ f() ]; // is f required to be evaluated ?
T x;
return sizeof x;
}
Does typedef pointer to VLA require evaluation of the size expression?
int f(void);
int main(void)
{
typedef int (*T) [ f() ]; // is f required to be evaluated ?
T x;
return sizeof x;
}
UPD. In the definition of f
is visible, then a call to it may be optimized out:
int f(void)
{
return 4;
}
int main(void)
{
typedef int (*T) [ f() ];
return sizeof(T);
}
Generated code (both GCC and LLVM):
main:
mov eax, 8
ret
It is expected, because there is no real need to call f
to determine the size of a pointer.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
根据 C 标准 (§6.7.8 类型定义 )
C 标准中有一个例子
这是一个演示程序。
程序输出是
According to the C Standard (§6.7.8 Type definitions)
And there is an example in the C Standard
Here is a demonstration program.
The program output is