编译失败 "expected expression before '{' token"
Compilation fails with "expected expression before '{' token"
我正在尝试以一种干净的方式初始化 ip_addr
,库为我提供了 IPADDR4_INIT
宏,但我似乎没有正确使用它。
这是提取的问题:
#include "stdint.h"
struct ip4_addr {
uint32_t addr;
};
typedef struct ip4_addr ip_addr_t;
#define IPADDR4_INIT(u32val) { u32val }
int main()
{
ip_addr_t ip_addr;
uint32_t u32val = 0xC0A80001;
ip_addr = IPADDR4_INIT(u32val);
return 0;
}
编译失败返回给我:
9:49: error: expected expression before '{' token
这个:
ip_addr = IPADDR4_INIT(u32val);
扩展为:
ip_addr = { u32val };
这不是有效的赋值语法。您要么需要在初始化时执行此操作:
uint32_t u32val = 0xC0A80001;
ip_addr_t ip_addr = IPADDR4_INIT(u32val);
或者将宏更改为允许您进行赋值的复合文字语法:
#define IPADDR4_INIT(u32val) (ip_addr_t){ u32val }
您不能使用大括号括起来的初始值设定项向结构类型的变量赋值,您必须在初始化中使用它语法。
类似
ip_addr_t ip_addr = IPADDR4_INIT(u32val);
应该做。
或者,您必须使用 compound literal,例如
ip_addr_t ip_addr = (ip_addr_t ) IPADDR4_INIT(u32val);
或者,将宏定义更改为包含一个:
#define IPADDR4_INIT(u32val) (ip_addr_t){ u32val }
编译器告诉您扩展的宏不是有效的 C。它变成了这样:
ip_addr = { u32val };
.
你只能初始化这样的结构,不能分配给一个。
不确定您要在这里做什么,设置一个结构成员?通过宏来做这件事没有多大意义,但如果你只是出于某种原因必须使用宏,那么你可以使用 复合文字 :
#define IPADDR4_INIT(u32val) (ip_addr_t){ .addr = (u32val) }
我正在尝试以一种干净的方式初始化 ip_addr
,库为我提供了 IPADDR4_INIT
宏,但我似乎没有正确使用它。
这是提取的问题:
#include "stdint.h"
struct ip4_addr {
uint32_t addr;
};
typedef struct ip4_addr ip_addr_t;
#define IPADDR4_INIT(u32val) { u32val }
int main()
{
ip_addr_t ip_addr;
uint32_t u32val = 0xC0A80001;
ip_addr = IPADDR4_INIT(u32val);
return 0;
}
编译失败返回给我:
9:49: error: expected expression before '{' token
这个:
ip_addr = IPADDR4_INIT(u32val);
扩展为:
ip_addr = { u32val };
这不是有效的赋值语法。您要么需要在初始化时执行此操作:
uint32_t u32val = 0xC0A80001;
ip_addr_t ip_addr = IPADDR4_INIT(u32val);
或者将宏更改为允许您进行赋值的复合文字语法:
#define IPADDR4_INIT(u32val) (ip_addr_t){ u32val }
您不能使用大括号括起来的初始值设定项向结构类型的变量赋值,您必须在初始化中使用它语法。
类似
ip_addr_t ip_addr = IPADDR4_INIT(u32val);
应该做。
或者,您必须使用 compound literal,例如
ip_addr_t ip_addr = (ip_addr_t ) IPADDR4_INIT(u32val);
或者,将宏定义更改为包含一个:
#define IPADDR4_INIT(u32val) (ip_addr_t){ u32val }
编译器告诉您扩展的宏不是有效的 C。它变成了这样:
ip_addr = { u32val };
.
你只能初始化这样的结构,不能分配给一个。
不确定您要在这里做什么,设置一个结构成员?通过宏来做这件事没有多大意义,但如果你只是出于某种原因必须使用宏,那么你可以使用 复合文字 :
#define IPADDR4_INIT(u32val) (ip_addr_t){ .addr = (u32val) }