Objective-C或C语言中此代码的规则语法是什么?

时间:2015-10-07 10:11:40

标签: objective-c c

我正在阅读Mach Ports的代码,我想知道一段代码的范例是什么。我的意思是我知道objective-c的结构语法,但我不知道message.header = (mach_msg_header_t) {......};

的语法

完整的代码如下。

natural_t data;

mach_port_t port;

struct {

    mach_msg_header_t header;
    mach_msg_body_t body;
    mach_msg_type_descriptor_t type;

} message;

message.header = (mach_msg_header_t) {

    .msgh_remote_port = port,
    .msgh_local_port = MACH_PORT_NULL,
    .msgh_bits = MACH_MSGH_BITS(MACH_MSG_TYPE_COPY_SEND, 0),
    .msgh_size = sizeof(message)

};

1 个答案:

答案 0 :(得分:0)

标头被分配给类型化的mach_msg_header_t伪构造函数,用于初始化某些字段。此处提供了结构细分:http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/(部分粘贴在下方)

typedef struct {
    mach_msg_bits_t msgh_bits;
    mach_msg_size_t msgh_size;
    mach_port_t msgh_remote_port;
    mach_port_t msgh_local_port;
    mach_port_seqno_t msgh_seqno;
    mach_msg_id_t msgh_id;
} mach_msg_header_t;

您引用的位,在结构中分配低级字段并复制到标题中。

message.header = (mach_msg_header_t) {

    .msgh_remote_port = port,
    .msgh_local_port = MACH_PORT_NULL,
    .msgh_bits = MACH_MSGH_BITS(MACH_MSG_TYPE_COPY_SEND, 0),
    .msgh_size = sizeof(message)

};