ROS2中argc和argv是什么?

系列文章目录

留空



前言

自用


一、argc和argv ?

在 C/C++ 中,argcargv 是传递给 main 函数的命令行参数。下面是它们的具体解释:

  1. argc:是一个整数(int)类型的参数,表示命令行参数的数量。它代表了程序运行时传递给程序的参数个数,包括程序名称本身(路径)。通常情况下,argc 的值至少为 1,因为第一个参数是程序的名称(路径)。
  2. 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) 中的 argcargv 参数允许程序从命令行接受参数,并且可以根据这些参数执行不同的操作。在ROS 2 中,通常会将 argcargv 传递给 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。

总结

自用

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值