扩展 C 宏的类型

type of expanded C macro

下面header中的PETSC_COMM_WORLD展开成什么类型​​和值? 它只是对 MPI_Commextern 范围的重新定义吗?

#define PETSC_EXTERN extern PETSC_VISIBILITY_PUBLIC

PETSC_EXTERN MPI_Comm PETSC_COMM_WORLD;

这是简单的文本替换,因此您最终得到:

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 本身不控制或修改类型(也不是那个属性),它只是声明此变量未在此处 创建 ,但应在其他地方提供。

完全取决于您定义变量的位置、它的作用域、是否初始化它等等。