我试图以一种干净的方式初始化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发布于 2020-06-12 12:47:07
这是:
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 }发布于 2020-06-12 12:47:37
不能使用大括号括起来的初始化器为initialization类型的变量分配值,您必须在语法中使用它。
有点像
ip_addr_t ip_addr = IPADDR4_INIT(u32val);应该可以的。
或者,您必须使用复合文字,类似于
ip_addr_t ip_addr = (ip_addr_t ) IPADDR4_INIT(u32val);或者,将宏定义更改为包含一个:
#define IPADDR4_INIT(u32val) (ip_addr_t){ u32val }发布于 2020-06-12 12:47:48
编译器告诉您展开的宏是无效的。
ip_addr = { u32val };。
您只能初始化这样的结构,而不能将其分配给结构。
不知道你想在这里做什么,设置一个结构成员?通过宏这样做没有多大意义,但是如果您只是出于某种原因必须使用宏,那么您可以使用复合文字。
#define IPADDR4_INIT(u32val) (ip_addr_t){ .addr = (u32val) }https://stackoverflow.com/questions/62344518
复制相似问题