C++ Clang 3.4的creal和cimag问题

C++ Clang 3.4的creal和cimag问题,c++,gcc,clang,c11,petsc,C++,Gcc,Clang,C11,Petsc,我正在使用Clang 3.4与Petsc编译一个库,并获得: error: use of undeclared identifier 'creal' 它遵循以下定义: petscmath.h:121:38: note: expanded from macro 'PetscRealPartComplex' #define PetscRealPartComplex(a) creal(a) 我能找到的唯一相关信息是,我不知道这是否是特定于编译器的,是否缺少一些库,或者我在Petsc方面有

我正在使用Clang 3.4与Petsc编译一个库,并获得:

error: use of undeclared identifier 'creal'
它遵循以下定义:

petscmath.h:121:38: note: expanded from macro 'PetscRealPartComplex'
#define PetscRealPartComplex(a)      creal(a)
我能找到的唯一相关信息是,我不知道这是否是特定于编译器的,是否缺少一些库,或者我在Petsc方面有一些问题

我试着在一个小测试文件中使用'cimag()',但我既不能用clang3.4也不能用gcc4.8编译它

任何人都知道发生了什么。谷歌没有显示任何类似的主题

编辑

下面是一个简单的例子:

#include <complex.h>
int main ()
{
   double complex z;
   double cc = cimag(z);
}
clang在这两种情况下都不会编译它,并产生与上述相同的错误。

参考:

标题应定义以下宏:

复杂的

    Expands to _Complex.
参考:

如果宏常量STDC\u NO\u COMPLEX(C11)由 编译器、标题和此处列出的所有名称 没有提供


注意,当使用GCC指定
-std=c++11
时,我得到了相同的结果,但不是
-xc-std=c11
。YMMV.

我是否正确理解CIMAG/CRIALL只定义为C,而不是C++?因此,只有在编译器定义了STDC\u NO\u COMPLEX的情况下,代码才编译为C,例如,
clang++-mp-3.4-x C main.cc-o main
?@Denis。我不认为这是C vs C++的东西。
    Expands to _Complex.