我正在使用Clang3.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编译(来自macport):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都不会编译它,并产生与上面相同的错误。
发布于 2013-12-09 09:42:10
参考资料:http://pubs.opengroup.org/onlinepubs/7999959899/basedefs/complex.h.html
标题应定义以下宏: 络合 扩展到_Complex。
参考资料:http://en.cppreference.com/w/c/numeric/complex
如果编译器定义了宏常量STDC_NO_COMPLEX(C11),则不提供此处列出的标题和所有名称。
请注意,在使用GCC指定-std=c++11时,我得到了相同的结果,但没有使用-x c -std=c11。YMMV
https://stackoverflow.com/questions/20430853
复制相似问题