module - 为什么在模块中声明常量时 omp 函数不起作用?

标签 module compiler-errors openmp fortran90 gfortran

我为我的全局变量声明定义了一个模块“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/

相关文章:

找不到 Python Mechanize 模块

c - 这个代码片段有什么问题

path - Makefile中的路径定义

c++ - 为什么数组索引在此程序中不显示交换行为?

c - 并行使用 pragma 进行构造

multithreading - OpenMP:在线程之间共享数组

openmp - OpenMP 4.0 中 "simd"构造和 "for simd"构造的区别

css - 坚持模块化样式

ios - 无法在 Swift 中跨模块访问属性包装器

python - 在 Pyramid 中编写应用程序,组合它们并重用它们的代码