扩展 C 宏的类型
type of expanded C macro
下面header中的PETSC_COMM_WORLD展开成什么类型和值?
它只是对 MPI_Comm
和 extern
范围的重新定义吗?
#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
本身不控制或修改类型(也不是那个属性),它只是声明此变量未在此处 创建 ,但应在其他地方提供。
值完全取决于您定义变量的位置、它的作用域、是否初始化它等等。
下面header中的PETSC_COMM_WORLD展开成什么类型和值?
它只是对 MPI_Comm
和 extern
范围的重新定义吗?
#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
本身不控制或修改类型(也不是那个属性),它只是声明此变量未在此处 创建 ,但应在其他地方提供。
值完全取决于您定义变量的位置、它的作用域、是否初始化它等等。