__FUNCT__ 有什么用?

Dan*_*Dan 1 c conventions c-preprocessor

我正在查看一些PETSc示例代码,我遇到了这个片段:

#undef __FUNCT__
#define __FUNCT__ "main"
Run Code Online (Sandbox Code Playgroud)

就在main开始之前。

__FUNCT__在每个函数(或只是 main?)之前设置或类似的东西是标准的 C 编程约定吗?

如果是这样,为什么要这样做?

小智 5

来自PETSc 源代码中的注释${PETSC_DIR}/src/snes/examples/tutorials/ex3.c第 33-40 行):

请注意,在下面的每个例程之前,我们将宏定义为__FUNCT__包含例程名称的字符串。如果已定义,此宏将用于 PETSc 错误处理程序以提供例程名称的完整追溯。所有 PETSc 库例程都使用这个宏,用户也可以选择在他们的应用程序代码中使用它。请注意,无论是否__FUNCT__在应用程序代码中定义,用户都可以获得 PETSc 错误的追溯;此宏仅提供应用程序例程名称的添加回溯详细信息。