2017-05-16 111 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,因爲這裏有多個適用的「行」定義。宏定義(實際上是所有的預處理器指令)完全包含在一個邏輯行上。從這個意義上說,沒有任何多行宏。宏定義可以在多條物理線上分佈的線延續在標記輸入文件之前被移除(如同),所以在預處理器被使用之前。 –

相關問題