2017-05-16 112 views
-1

例如:'#include'和'## include'有什么区别?

#include "pathtoheader1/header1.hh" 
##include "pathtoheader2/header2.hh" 

是什么这两个预处理指令之间的区别?

编辑

从我所知道的,## include指令,在我与运行程序的情况下,将预先准备-I标志来指定包含路径。

TRICK_CFLAGS += -Imodels 
TRICK_CXXFLAGS += -Imodels 

编译器现在将寻找:中

/models/pathtoheader1/header1.hh 

代替

/pathtoheader1/header1.hh 

这些标志被存储在一个.mk文件。

其他信息

我使用NASA的惯用伎俩仿真环境中构建一个简单的二体模拟地球绕太阳公转的。我正在使用的特定工具被称为“trick-CP”,Trick的编译工具。

https://github.com/nasa/trick

+7

第二个将无法工作。 –

+2

您正在使用哪种编译器?这是C还是C++? – Bathsheba

+1

这不是一个直接的重复,但它非常接近,[对于C(C++)预处理器,##是什么意思?](http://stackoverflow.com/questions/2025858/what-does-mean-for-the- CC-预处理器)。 – George

回答

2

问题是关于NASA的技巧。 Trick用自己的语法扩展了C和C++语言。

从圈套documentation

头文件,该供给的数据类型为用户定义的模型应该使用##包括被包括在内。请注意双重散列(#)。

+0

我没有意识到## include是一个窍门特定的语法。谢谢。 –

2

第二个是C++中的语法错误,我敢肯定这是一个在C语法错误太多。 ##预处理器运算符只在预处理器宏(强制令牌粘贴的位置)内有效。

3

##令牌粘贴运算符在C和C++预处理器中。它用于连接两个参数。

由于它需要任一侧的参数,所以以它开头的行在语法上不是有效的,除非它是前一行使用行连续符号\或等同三字符序列的前一行的继续。

+0

实际上,以'##'开头的行可以在多行宏内在语法上有效。 – DAle

+0

@DAle:自然。 – Bathsheba

+0

小心@DAle,因为这里有多个适用的“行”定义。宏定义(实际上是所有的预处理器指令)完全包含在一个逻辑行上。从这个意义上说,没有任何多行宏。宏定义可以在多条物理线上分布的线延续在标记输入文件之前被移除(如同),所以在预处理器被使用之前。 –

相关问题