以下标题中的PETSC_COMM_WORLD扩展为什么类型和价值?
它只是MPI_Comm
extern
范围的重新定义吗?
#define PETSC_EXTERN extern PETSC_VISIBILITY_PUBLIC
PETSC_EXTERN MPI_Comm PETSC_COMM_WORLD;
答案 0 :(得分: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
本身并不控制或修改类型(也不是该属性)它只是声明此变量不是创建的,而应该在其他地方提供。
值完全取决于您定义变量的位置,变量的范围,是否初始化等等。