01 简介
看示例代码的时候,发现总是出现rcl_ret_t rc,或是rc!=RCL_RET_OK,或是各种rc=...
赋值rc并比较 是为了检查return code。虽然使用 rc 只是一种习惯,并不是必要的,但是这可以在代码报错时帮助我们及时定位bug。
多数情况下,这是一个好习惯,但是别滥用~
02 示例
2.1 声明
数据类型rcl_ret_t,如下:
2.2 场景1:初始化
通常情况下,main函数起首定义四件套,rc、allocator、support、node
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| int main(int argc, const char * argv[]) { rcl_ret_t rc; rcl_allocator_t allocator = rcl_get_default_allocator(); rclc_support_t support; rc = rclc_support_init(&support, argc, argv, &allocator); if (rc != RCL_RET_OK) { printf("Error rclc_support_init.\n"); return -1; }
rcl_node_t my_node = rcl_get_zero_initialized_node(); rc = rclc_node_init_default(&my_node, "node_0", "executor_examples", &support); if (rc != RCL_RET_OK) { printf("Error in rclc_node_init_default\n"); return -1; } }
|
2.3 场景2:清除过程
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| int main(int argc, const char * argv[]) { rc = rclc_executor_fini(&executor_pub); rc += rclc_executor_fini(&executor_sub); rc += rcl_publisher_fini(&my_string_pub, &my_node); rc += rcl_publisher_fini(&my_int_pub, &my_node); rc += rcl_timer_fini(&my_string_timer); rc += rcl_timer_fini(&my_int_timer); rc += rcl_subscription_fini(&my_string_sub, &my_node); rc += rcl_subscription_fini(&my_int_sub, &my_node); rc += rcl_node_fini(&my_node); rc += rclc_support_fini(&support);
std_msgs__msg__Int32__fini(&int_pub_msg); std_msgs__msg__String__fini(&string_sub_msg); std_msgs__msg__Int32__fini(&int_sub_msg);
if (rc != RCL_RET_OK) { printf("Error while cleaning up!\n"); return -1; }
|