这些宏定义的目的是什么?

时间:2015-03-30 10:09:10

标签: c++ c-preprocessor

我正在构建机器人控制器,我想为我的项目引用ros::industrial_core

有两个定义,FLOAT64,LINUXSOCKETS,我不知道FLOAT64和LINUXSOCKETS的确切功能。

以下是shared_types.h

的一部分
#ifndef FLOAT64
typedef float shared_real;
#else
typedef double shared_real;
#endif

这是simple_socket.h

的一部分
#ifdef LINUXSOCKETS
#include "sys/socket.h"
#include "arpa/inet.h"
#include "string.h"
#include "unistd.h"
#endif

我对他们有点直觉。我猜他们存在一般性。

过去,我看过这种定义,但我并不在乎,但现在看来他们正在做一些重要的功能。

您能解释一下这种定义的功能以及如何使用它们,或者分享相关文章的链接吗?

2 个答案:

答案 0 :(得分:2)

FLOAT64

当您通过两个系统之间的套接字传递数据时,您需要非常小心您使用的数据类型。一个系统上的int可能是2个字节而另一个系统上是4个字节。

此宏正在尝试确保类型shared_real表示8字节浮点数。

LINUXSOCKETS

据推测,这与一些独立于平台的代码有关。如果我们在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

谢谢。