我为我的全局变量声明定义了一个模块“gvars”。当我定义integer :: nthreads, max_threads, tid, omp_get_max_threads, omp_get_num_threads, omp_get_thread_num
在我的 gvars 模块内部,调用 maxthreads = omp_get_max_threads()
在我的主程序中,编译时出现以下错误:
maxthreads = omp_get_max_threads()
1
Error: Unclassifiable statement at (1)
但是当我包含
integer ::
在我的主程序中上面的定义,它编译得很好并给了我想要的结果。如果我什至去定义nthreads = -1
在我的 gvars 模块中,我能够在我的主程序中打印出正确的值,所以我知道它被正确包含和定义,只是由于某种原因我不能将它作为 openmp 函数的返回值。为什么会这样?
有没有其他方法可以将这些值保留为全局变量并仍然在我的主程序而不是模块中定义它们?
如果重要的话,我正在使用 gfortran 进行编译
最佳答案
问题不在于 maxthreads
的声明。 ,但在同一行声明 omp_get_max_threads
.正如 haraldkl 所示,您需要 use omp_lib
相反,自动访问这些函数的声明。
(如果出于某种原因您真的不想这样做,您也可以在模块中添加语句 external :: omp_get_max_threads, ...
。)
关于module - 为什么在模块中声明常量时 omp 函数不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9344335/