1、std::cout
C++<iostream>
自带,不用标明数据的类型,可以直接输出,不过只能输出几种基本格式的数据。
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显示。