0

我正在使用 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);
}

它使用Gcc4.8编译(来自 macports):g++-mp-4.8 main.cc -o main

但是在 c11 模式下它不会: g++-mp-4.8 -std=c++11 main.cc -o main:

expected initializer before 'z' double complex z;

clang在这两种情况下都不会编译它并产生与上述相同的错误。

4

1 回答 1

0

参考: http: //pubs.opengroup.org/onlinepubs/7999959899/basedefs/complex.h.html

标头应定义以下宏:

复杂的

    Expands to _Complex.

参考:http ://en.cppreference.com/w/c/numeric/complex

如果宏常量STDC_NO_COMPLEX (C11) 由编译器定义,则不提供标头和此处列出的所有名称。

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

于 2013-12-09T09:42:10.510 回答