我正在构建机器人控制器,我想为我的项目引用ros::industrial_core
。
有两个定义,FLOAT64,LINUXSOCKETS,我不知道FLOAT64和LINUXSOCKETS的确切功能。
的一部分#ifndef FLOAT64
typedef float shared_real;
#else
typedef double shared_real;
#endif
的一部分
#ifdef LINUXSOCKETS
#include "sys/socket.h"
#include "arpa/inet.h"
#include "string.h"
#include "unistd.h"
#endif
我对他们有点直觉。我猜他们存在一般性。
过去,我看过这种定义,但我并不在乎,但现在看来他们正在做一些重要的功能。
您能解释一下这种定义的功能以及如何使用它们,或者分享相关文章的链接吗?
答案 0 :(得分:2)
当您通过两个系统之间的套接字传递数据时,您需要非常小心您使用的数据类型。一个系统上的int
可能是2个字节而另一个系统上是4个字节。
此宏正在尝试确保类型shared_real
表示8字节浮点数。
据推测,这与一些独立于平台的代码有关。如果我们在Linux上,我们应该使用Linux的套接字实现。但Windows可能没有实现与Linux相同的套接字协议。所以可能是WINSOCKETS
之类的宏。
通常,在构建软件时,您将运行一个配置脚本,该脚本将生成一个名为config.h
的文件(通常,但它可以命名为任何内容)。对于不同的平台,此文件将有所不同,但将包含正确的宏定义,以便软件正常工作。
答案 1 :(得分:0)
谢谢@Jonathan和@Bill。
我明白这些宏现在是什么。
FLOAT64和LINUXSOCKETS,都是为了平台独立性而存在。
如果你的机器人系统使用linux套接字,你必须定义' LINUXSOCKETS'在包含simple_socket的头文件之前。
如果你必须使用' shared_real'因为8字节长,你应该定义' FLOAT64'在包含shared_real的头文件之前。
任何想了解更多信息的机构都可以阅读开发者的评论。
https://code.google.com/p/swri-ros-pkg/issues/detail?id=62
谢谢。