如何在这个示例fortran代码上使用doxygen预处理器?

如何在这个示例fortran代码上使用doxygen预处理器?,fortran,preprocessor,doxygen,Fortran,Preprocessor,Doxygen,在名为lib_angles.f90的fortran源文件中,我有以下函数声明 #ifdef NDEBUG pure function la_get_quadrant(A) #else function la_get_quadrant(A) #endif 我在配置文件中使用以下设置 ENABLE_PREPROCESSING = YES MACRO_EXPANSION = NO PREDEFINED = NDEBUG 运行最新版本的dox

在名为lib_angles.f90的fortran源文件中,我有以下函数声明

#ifdef NDEBUG  
pure function la_get_quadrant(A)  
#else  
function la_get_quadrant(A)  
#endif
我在配置文件中使用以下设置

ENABLE_PREPROCESSING   = YES
MACRO_EXPANSION        = NO
PREDEFINED             = NDEBUG
运行最新版本的doxygen(1.8.5)会产生以下输出:

(...)
Reading /home/pmginacio/bin/doc/test/lib_angles.f90...  
Parsing file /home/pmginacio/bin/doc/test/lib_angles.f90...  
********************************************************************  
Error in file /home/pmginacio/bin/doc/test/lib_angles.f90 line: 38, state: 4  
********************************************************************  
Segmentation fault (core dumped)  
问题似乎在于预处理器没有选择函数声明之一。当我在代码中对其中一个进行注释时

#ifdef NDEBUG  
pure function la_get_quadrant(A)  
#else  
!function la_get_quadrant(A)  
#endif
doxygen执行正常


为什么??应该如何使用预处理器?

问题远不止您在这里介绍的内容。基于问题内容的最小输入文件适用于我。只需在示例中添加语句结束函数,即可重现该问题。问题是文件的扩展名。在f90扩展中,#if只被视为注释,因为没有进行预处理,因此可以看到2个函数启动,只有1个函数结束。使用扩展名F90执行预处理,并且只有一个函数启动。我已经更改了文件的扩展名,现在可以正常工作。谢谢你们的反馈。