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

Module 为什么在模块中声明常量时omp函数不起作用?,module,compiler-errors,openmp,fortran90,gfortran,Module,Compiler Errors,Openmp,Fortran90,Gfortran,我为全局变量声明定义了一个模块“gvars”。当我定义 integer::nthreads,max_threads,tid,omp_get_max_threads,omp_get_num_threads,omp_get_threads,omp_threads num在我的gvars模块中,主例程中的调用maxtreads=omp_get_max_threads()在编译时给我以下错误: maxthreads = omp_get_max_threads() 1 Error: Unclassifia

我为全局变量声明定义了一个模块“gvars”。当我定义
integer::nthreads,max_threads,tid,omp_get_max_threads,omp_get_num_threads,omp_get_threads,omp_threads num
在我的gvars模块中,主例程中的调用
maxtreads=omp_get_max_threads()
在编译时给我以下错误:

maxthreads = omp_get_max_threads()
1
Error: Unclassifiable statement at (1)
但是当我在主例程中包含上面的
整数::
定义时,它编译得很好,并给出了所需的结果。如果我甚至在我的gvars模块中定义
nthreads=-1
,我就能够在我的主例程中打印出正确的值,这样我就知道它被正确地包含和定义了,只是出于某种原因,我无法将它作为openmp函数的返回值

为什么会这样

是否有其他方法将这些值保留为全局变量,并在我的主例程中而不是在模块中定义它们


如果重要的话,我正在使用gfortran编译

这并不是一个真正的答案,但我不知道如何将代码放在这里。对不起

 module gvars
   integer :: maxthreads
 end module gvars

 program test
  use gvars
  use omp_lib

  implicit none

  maxthreads = omp_get_max_threads()
 end program test
汇编时使用: gfortran-fopenmp测试f90

其中gfotran-v给出:
gcc版本4.4.5(gcc)

不是一个真正的答案,但我不知道如何将代码放在这里。对不起

 module gvars
   integer :: maxthreads
 end module gvars

 program test
  use gvars
  use omp_lib

  implicit none

  maxthreads = omp_get_max_threads()
 end program test
汇编时使用: gfortran-fopenmp测试f90

其中gfotran-v给出:
gcc版本4.4.5(gcc)

问题不在于
maxthreads
的声明,而在于同一行上的
omp\u get\u max\u threads
的声明。正如haraldkl所示,您需要
使用omp_lib
来自动访问这些函数的声明


(如果出于某种原因您确实不想这样做,您也可以将语句
external::omp\u get\u max\u threads,
添加到模块中。)

问题不在于
maxtreads
的声明,而在于同一行上的
omp\u get\u max\u threads
的声明。正如haraldkl所示,您需要
使用omp_lib
来自动访问这些函数的声明


(如果出于某种原因您确实不想这样做,您还可以将语句
external::omp\u get\u max\u threads,…
添加到模块中。)

您实际使用GVAR吗?GVAR中的maxthreads是否可公开访问?它适合我。gvars中的maxthreads绝对是可访问的。当我将nthreads定义为GVAR中的给定值时,我可以从主例程打印相同的值。这到底对你有什么好处?!你能分享你的代码吗?你真的使用GVAR吗?GVAR中的maxthreads是否可公开访问?它适合我。gvars中的maxthreads绝对是可访问的。当我将nthreads定义为GVAR中的给定值时,我可以从主例程打印相同的值。这到底对你有什么好处?!你能分享你的代码吗?如果我想确保这些变量(maxthreads、numthreads等)是全局的,我需要在我的“gvars”模块中“使用omp_lib”吗?你说的全局是什么意思?如果您在gvars中使用它,并且没有在gvars中声明私有语句,那么omp_lib的内容应该在您使用gvars的任何地方都可用。尽管我认为在任何地方都使用omp_lib,但实际需要的地方对读者来说更为透明。如果我想确保这些变量(maxthreads、numthreads等)是全局变量,我是否需要在我的“gvars”模块中“使用omp_lib”?全局是什么意思?如果您在gvars中使用它,并且没有在gvars中声明私有语句,那么omp_lib的内容应该在您使用gvars的任何地方都可用。虽然我认为在任何地方使用omp_lib,但实际上需要它的地方对读者来说更透明。