【发布时间】:2018-11-24 01:16:25
【问题描述】:
考虑以下 sn-p:
struct my_struct {
int a;
int b;
int c;
};
void my_func(unsigned long x)
{
struct my_struct m[] = {
{ 0, 1, 2 },
{ 11, 22, htonl(x) },
{ 0x1, 0xa, 0xbb }
};
...
}
在结构初始化块内调用函数是否合法/可移植?
【问题讨论】:
-
您的意思是一般情况下还是仅适用于您的 sn-p 中的自动变量?您的标准兼容编译器怎么说?你能指望什么?为什么?
-
正如您所展示的那样[在
gcc]下编译干净。但是,如果您将m设为全局(文件范围变量),它将不是。编译器标记htonl:错误:初始化元素不是常量。我相信大多数 C 编译器都会以类似的方式运行。 旁注: C++ 确实 允许在全局范围内执行此操作 [在您的示例中,它警告ntonl未签名而不是已签名int c,但这很容易修复]