【发布时间】:2014-01-17 19:39:02
【问题描述】:
我正在查看rabbitmq-c,并注意到以下内容:
首先,我不太明白外大括号的用法,比如这样:
{
amqp_queue_declare_ok_t *r = amqp_queue_declare(conn, 1, amqp_empty_bytes, 0, 0, 0, 1,
amqp_empty_table);
die_on_amqp_error(amqp_get_rpc_reply(conn), "Declaring queue");
queuename = amqp_bytes_malloc_dup(r->queue);
if (queuename.bytes == NULL) {
fprintf(stderr, "Out of memory while copying queue name");
return 1;
}
}
其次,看看这个:
{
while (1) {
amqp_rpc_reply_t res;
amqp_envelope_t envelope;
amqp_maybe_release_buffers(conn);
res = amqp_consume_message(conn, &envelope, NULL, 0);
if (AMQP_RESPONSE_NORMAL != res.reply_type) {
break;
}
printf("Delivery %u, exchange %.*s routingkey %.*s\n",
(unsigned) envelope.delivery_tag,
(int) envelope.exchange.len, (char *) envelope.exchange.bytes,
(int) envelope.routing_key.len, (char *) envelope.routing_key.bytes);
if (envelope.message.properties._flags & AMQP_BASIC_CONTENT_TYPE_FLAG) {
printf("Content-type: %.*s\n",
(int) envelope.message.properties.content_type.len,
(char *) envelope.message.properties.content_type.bytes);
}
amqp_destroy_envelope(&envelope);
}
}
在我看来,如果 AMQP_RESPONSE_NORMAL != res.reply_type,while 循环应该会中断。但是,事实并非如此。 break 语句的作用类似于“继续”语句。显然,使用“继续”是行不通的。同样,我不确定为什么,因为据我所知,中断会导致退出 while 循环。
【问题讨论】:
标签: c++ c while-loop rabbitmq break