2015-11-22 58 views
1

我正在挖掘numpy的膽量,試圖找出爲什麼它不適合我(64位Cygwin,Windows 8.1),我來到this file這個C代碼中的'@'符號是什麼?

當編譯命中rad2deg()函數(粘貼在下面)時,我得到一個段錯誤。看看這個文件,整個代碼中都有一個'@'符號。它看起來像像某種通配符令牌或預處理器令牌,但我無法在任何地方找到任何信息。

#define LOGE2 [email protected]@ 
#define LOG2E [email protected]@ 
#define RAD2DEG ([email protected]@/[email protected]@) 
#define DEG2RAD ([email protected]@/[email protected]@) 

@[email protected] [email protected]@(@[email protected] x) { 
    return x*RAD2DEG; 
}` 

代碼中還有其他地方的編譯器不會用'@'字符扼殺。

任何人都可以指向我的搜索字詞,可以解釋這一點嗎?

+5

看起來他們有自己的預處理器,根據上面的註釋替換這些符號。 – SLaks

+0

你的意思是編譯器發佈段錯誤嗎?你使用什麼編譯器? – usr2564301

+1

是的,編譯器發出段錯誤。我認爲斯拉克斯是正確的,這是一個紅鯡魚;這似乎是某種預處理的東西,將這些代碼塊擴展成多個函數。 – UptownMaker

回答

2

好吧,我已經想通了。這是我長時間小睡並服用一劑止咳藥後發佈的問題。

這是一些非標準的預處理器前技巧,可能是在構建numpy的C代碼的Python代碼中實現的。

/**begin repeat 
* #type = npy_float, npy_double, npy_longdouble# 
* #c = f, ,l# 
* #C = F, ,L# 
*/ 

#define LOGE2 [email protected]@ 
#define LOG2E [email protected]@ 
#define RAD2DEG ([email protected]@/[email protected]@) 
#define DEG2RAD ([email protected]@/[email protected]@) 

@[email protected] [email protected]@(@[email protected] x) 
{ 
    return x*RAD2DEG; 
} 

/**end repeat**/ 

它遍歷整個代碼,替換@與在註釋塊的令牌代碼-surrounded令牌,生成對不同的數據類型進行操作3個幾乎相同的代碼塊。

我懷疑segfault可能來自不正確的數據類型;我們拭目以待。

謝謝大家!

+0

編譯器本身是否死於seg故障?如果是這樣,那是編譯器中的一個錯誤。錯誤的數據類型只會導致錯誤消息,而不會導致編譯時崩潰。 –

相關問題