结构中的PETSc C宏
在PETSc中,许多常用结构(如Vec、Mat、IS等)的定义与下面的4个代码片段类似。 问题:结构中的PETSc C宏,c,macros,header-files,petsc,C,Macros,Header Files,Petsc,在PETSc中,许多常用结构(如Vec、Mat、IS等)的定义与下面的4个代码片段类似。 问题: PETSCHEADER何时以及如何扩展?我正在用另一种语言编写外部接口,我想知道是否需要将宏包装成函数之类的东西 hdr和ops的范围是什么 提前谢谢 petscvec.h typedef struct _p_Vec* Vec; 向量impl.h struct _p_Vec { PETSCHEADER(struct _VecOps); PetscLayout m
- PETSCHEADER何时以及如何扩展?我正在用另一种语言编写外部接口,我想知道是否需要将宏包装成函数之类的东西
和hdr
的范围是什么ops
petscvec.h
typedef struct _p_Vec* Vec;
向量impl.h
struct _p_Vec {
PETSCHEADER(struct _VecOps);
PetscLayout map;
void *data; /* implementation-specific data */
...
typedef struct _VecOps *VecOps;
struct _VecOps {
PetscErrorCode (*duplicate)(Vec,Vec*); /* get single vector */
PetscErrorCode (*duplicatevecs)(Vec,PetscInt,Vec**); /* get array of vectors */
...
petscimpl.h
#define PETSCHEADER(ObjectOps) \
_p_PetscObject hdr; \
ObjectOps *ops
向量impl.h
struct _p_Vec {
PETSCHEADER(struct _VecOps);
PetscLayout map;
void *data; /* implementation-specific data */
...
typedef struct _VecOps *VecOps;
struct _VecOps {
PetscErrorCode (*duplicate)(Vec,Vec*); /* get single vector */
PetscErrorCode (*duplicatevecs)(Vec,PetscInt,Vec**); /* get array of vectors */
...
关于第一点,可能会有所帮助,尤其是第4阶段。我还建议您通过预处理器运行代码,并在编译器“正确”获得它之前查看预处理代码的外观。我已经构建了这个库,也许我可以在某个地方找到预处理的源代码,或者通常在make之后将其删除?否则,是否有一组cpp标志用于发出此信号?通常没有单独的预处理器步骤,但您可以直接调用预处理器(POSIX(如Linux或OSX)环境中的
cpp
),或使用例如gcc-e
(带有正常标志)在预处理源代码后要求gcc编译器停止。在VisualStudio中也应该有生成预处理代码的选项,可能在其他IDE中也有。