扩展C宏的类型

时间:2015-05-18 05:49:59

标签: c macros petsc

以下标题中的PETSC_COMM_WORLD扩展为什么类型和价值? 它只是MPI_Comm extern范围的重新定义吗?

#define PETSC_EXTERN extern PETSC_VISIBILITY_PUBLIC

PETSC_EXTERN MPI_Comm PETSC_COMM_WORLD;

1 个答案:

答案 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本身并不控制或修改类型(也不是该属性)它只是声明此变量不是创建的,而应该在其他地方提供。

完全取决于您定义变量的位置,变量的范围,是否初始化等等。