系列文章目录
留空
前言
自用
一、argc和argv ?
在 C/C++ 中,argc
和 argv
是传递给 main
函数的命令行参数。下面是它们的具体解释:
argc
:是一个整数(int
)类型的参数,表示命令行参数的数量。它代表了程序运行时传递给程序的参数个数,包括程序名称本身(路径)。通常情况下,argc
的值至少为 1,因为第一个参数是程序的名称(路径)。argv
:是一个字符指针数组(char**
)类型的参数,用于存储实际的命令行参数字符串。argv[0]
存储的是程序的名称,argv[1]
存储的是第一个参数,依此类推。
例如,如果你在命令行中运行程序并传递了一些参数,比如 ros2 run package_name node_name arg1 arg2
,那么 argc
的值将会是 3(包括程序路径),argv
数组将会是 {"./package_name/node_name", "arg1", "arg2"}
。
在上面的代码中,int main(int argc, char** argv)
中的 argc
和 argv
参数允许程序从命令行接受参数,并且可以根据这些参数执行不同的操作。在ROS 2 中,通常会将 argc
和 argv
传递给 rclcpp::init
函数,以便初始化 ROS 2 系统并接受 ROS 2 特定的参数。
二、举例
下面是一个具体的例子
#include "rclcpp/rclcpp.hpp"
int main(int argc, char** argv)
{
rclcpp::init(argc, argv);
//创建一个ROS2节点
auto node = std::make_shared<rclcpp::Node>("example01");
//打印出argv
if (argc > 1)
{
for (int i = 0; i < argc; i++)
{
RCLCPP_INFO(node->get_logger(), "argv[%d]:%s", i, argv[i]);
}
}
else
{
RCLCPP_INFO(node->get_logger(), "No command line arguments provided.");
}
//打印出argc
RCLCPP_INFO(node->get_logger(), "argc = %d", argc);
rclcpp::spin(node);
rclcpp::shutdown();
return 0;
}
打开终端,输入命令行
colcon build
source install/setup.sh
ros2 run example01 example01_node -name a
当执行ros2 run example01 example01_node -name a
命令时,ROS 2系统会运行example01
包中的example01_node
节点,并将-name a
作为命令行参数传递给该节点。节点可以在程序中接收这个参数,并通过RCLCPP_INFO()
它们打印出来。
运行命令行,输出结果:
argv[0]:/home/***/towm_ws/install/example01/lib/example01/example01_node
argv[1]:-name
argv[2]:a
argc = 3
程序接收到并打印出
argv[0]
:可执行文件的路径
argc[1]
:[第二个命令行参数]
argc[2]
:[第三个命令行参数]
以此类推…
argc
= 命令行参数的数量
其中,argv[0]
是固定不变的,不管有没有传入参数,第一个可执行文件的路径都是存在的,所以argc
最小是1。
总结
自用