std::cout、printf 和 RCLCPP_INFO的对比

1、std::cout

C++自带,不用标明数据的类型,可以直接输出,不过只能输出几种基本格式的数据。

2、printf

C++自带。
typedef 重新定义数据格式后,std::cout是不能正常输出显示的,必须用printf()才能输出uint8_t类型的数据值,需要标明数据的类型。

printf()函数的调用格式为:

printf("<格式化字符串>", <参量表>);
// 1、整形
%d  有符号十进制整形
%ld 十进制长整形
%3d 位数为3,不足则在左边补空格

%u  无符号十进制整形
%lu 无符号十进制长整形

%x  无符号十六进制整形,如0x12
%lx 位数为4,不足则在左边补0,常用,如0x0012

// 2、实型
%f  float型
%lf double型
    
m.n m指域宽,即所占的总的位数,包含小数点;n指精度,即小数的位数
%f  不指定宽度,整数部分全部输出,并输出6位小数

// 3、字符
%c  字符

// 4、字符串
%s  字符串

// 5、指针
%p  指针

​ 比如:

int val = 86;
printf("val= %d, 字符= %c",val,val);
//val= 86, 字符= V

3、RCLCPP_INFO

ROS2自带的log输出,分等级,带颜色,输出格式与printf相同,需要标明数据的类型。

RCLCPP_INFO(get_logger(),"val:%d",val);

4、异同点

4.1 各自优点

  • std::cout简单,不要标明数据类型,直接输出;
  • printf输出数据类型多,可以输出typedef重定义后的类型;
  • RCLCPP_INFO分等级,比如RCLCPP_ERROR会在终端上显示红色,便于对不同的错误等级log分类,且会显示绝对时间以及ros node的名称;

4.2 选择

  • std::cout和printf可以用linux的重定向>将终端显示输出到指定文件中,而RCLCPP_INFO无法重定向;
  • std::cout使用方便,不用指明数据的类型;
  • print和RCLCPP_INFO需要指明数据类型,一旦数据类型指明错误,则无法输出log显示。

你可能感兴趣的:(编程,ROS,c++)