在函数调用参数中初始化结构
Initializing struct in function call parameter
我有这样的代码:
typedef enum {
API_SIG_SERVER_CONNECTED = 1,
API_SIG_DATA_RECEIVED,
} api_signals_t;
typedef struct {
api_signals_t signal;
void * params;
} api_msg_t;
static void send_msg_to_api(api_msg_t * p_msg){
// do something
}
void main(){
api_msg_t msg = {API_SIG_SERVER_CONNECTED, 0};
send_msg_to_api(&msg);
}
我可以缩短这部分吗没有宏?
api_msg_t msg = {API_SIG_SERVER_CONNECTED, 0};
send_msg_to_api(&msg);
这是不可能的:
send_msg_to_api({API_SIG_SERVER_CONNECTED, 0});
这是可能的,但很难看:
send_msg_to_api(&((api_msg_t){API_SIG_SERVER_CONNECTED, 0}));
是否有其他方法可以在单行中进行结构初始化和函数调用?
我可以将其包装在一个宏中以使其更漂亮,或者重写 send_msg_to_api
函数以获取 2 个参数并在内部初始化结构,但这不是我的观点。我正在学习 C,我想知道是否有一些“漂亮”的方法可以做到这一点。
您尝试过的几乎是您唯一的选择。我唯一看到的是你在复合文字示例中有一组额外的括号你可以去掉:
send_msg_to_api(&(api_msg_t){API_SIG_SERVER_CONNECTED, NULL});
此外,您通常应该使用 NULL
作为空指针而不是常量 0,因为它可以更清楚地说明您的意图。
我有这样的代码:
typedef enum {
API_SIG_SERVER_CONNECTED = 1,
API_SIG_DATA_RECEIVED,
} api_signals_t;
typedef struct {
api_signals_t signal;
void * params;
} api_msg_t;
static void send_msg_to_api(api_msg_t * p_msg){
// do something
}
void main(){
api_msg_t msg = {API_SIG_SERVER_CONNECTED, 0};
send_msg_to_api(&msg);
}
我可以缩短这部分吗没有宏?
api_msg_t msg = {API_SIG_SERVER_CONNECTED, 0};
send_msg_to_api(&msg);
这是不可能的:
send_msg_to_api({API_SIG_SERVER_CONNECTED, 0});
这是可能的,但很难看:
send_msg_to_api(&((api_msg_t){API_SIG_SERVER_CONNECTED, 0}));
是否有其他方法可以在单行中进行结构初始化和函数调用?
我可以将其包装在一个宏中以使其更漂亮,或者重写 send_msg_to_api
函数以获取 2 个参数并在内部初始化结构,但这不是我的观点。我正在学习 C,我想知道是否有一些“漂亮”的方法可以做到这一点。
您尝试过的几乎是您唯一的选择。我唯一看到的是你在复合文字示例中有一组额外的括号你可以去掉:
send_msg_to_api(&(api_msg_t){API_SIG_SERVER_CONNECTED, NULL});
此外,您通常应该使用 NULL
作为空指针而不是常量 0,因为它可以更清楚地说明您的意图。