2015-05-18 139 views
0

以下頭文件中的PETSC_COMM_WORLD的類型和值展開爲? 它是否僅僅是extern範圍內的MPI_Comm的重新定義?擴展C宏的類型

#define PETSC_EXTERN extern PETSC_VISIBILITY_PUBLIC 

PETSC_EXTERN MPI_Comm PETSC_COMM_WORLD; 

回答

2

這是簡單的文本替換,所以你最終:

extern PETSC_VISIBILITY_PUBLIC MPI_Comm PETSC_COMM_WORLD; 

。因此PETSC_COMM_WORLD類型是PETSC_VISIBILITY_PUBLIC MPI_Comm等取決於PETSC_VISIBILITY_PUBLIC定義,尚未提供。

從粗略搜索網,在使用它建設petsc DLL或屬性__attribute__((visibility ("default")))它將是空的。

extern本身不控制或修改型(也沒有爲此事該屬性),它只是說,這個變量沒有被創建這裏,但應提供在其他地方。

完全取決於您在何處定義變量,它的範圍,是否初始化等等。

+0

謝謝您的詳細解釋;從一個MPI實現中,我期待'MPI_COMM_WORLD'和類似的是一個整數常量,在配置後修復。我有興趣在編譯時捕撈它的價值(我用另一種語言包裝這個庫),這樣做的慣用方法是什麼?再次感謝 – ocramz

+1

@ocramz,你可以使用'gcc -E yourfile.c |在預處理步驟之後,讓它輸出翻譯單元。這應該會給你所有的預處理符號。微軟有'/ P/C'選項,它會給你一個包含預處理器輸出的'yourfile.i'文件(留下留言)。 – paxdiablo

+0

再次感謝您;我在Unix上;然而,配置/構建是相當複雜的(一個非常大的makefile);我想知道是否可能有一種方式來編寫一個簡單的C封裝,它會公開只返回這些常量值的函數.. – ocramz