如何在这个示例fortran代码上使用doxygen预处理器?
在名为lib_angles.f90的fortran源文件中,我有以下函数声明如何在这个示例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
#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执行预处理,并且只有一个函数启动。我已经更改了文件的扩展名,现在可以正常工作。谢谢你们的反馈。