проблемы с creal и cimag в Clang 3.4

Я собираю библиотеку с Petsc, используя Clang 3.4 и получаю:

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.

У любого есть идеи, что происходит. Google не показывает подобные темы …

РЕДАКТИРОВАТЬ:

Итак, вот простой пример:

#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;

лязг не скомпилируйте его в любом случае и выдайте ту же ошибку, что и выше.

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(С11) определяется
Компилятор, заголовок и все перечисленные здесь имена
не предоставлен.

Обратите внимание, что я получаю те же результаты при указании -std=c++11 с GCC, но не -x c -std=c11, YMMV.

0

Другие решения

Других решений пока нет …