希望在if-else中只编译if语句



我正在做一个项目,该项目应该同时在ros merycic(ubuntu 18.04(和ros noetic(ubuntu 20.04(上运行。因此,在这样做的同时,我在代码中做了一个if-else声明,

if(distro=="noetic"){
...do this
else
...do this

这个问题基本上发生了,noetic和melodic支持不同版本的点云库(PCL(,这也使它们在初始化方式上有所不同。所以当我在if语句和else语句中放入PCL初始化(noetic支持的方式(时,我放入了旋律初始化的方式。我希望编译器(我使用的catkin_make命令(只编译if语句,但它也编译else语句,因为noetic不支持旋律初始化方式,所以会出现错误。该怎么办?

使用预处理器宏。这需要在编译前处理。预处理器宏#ifdef#ifndef将检查符号表中是否存在令牌(查看操作系统的文档,查看是否有为其定义的令牌(,并跳到根据if/else部分。


#ifdef NOETIC_DISTRO
//Code for noetic distro
#endif
#ifdef OTHER_DISTRO
//Code for other distro
#endif

最新更新