在函数调用参数中初始化结构

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,因为它可以更清楚地说明您的意图。