Xcode 4.2 и лямбда-выражения (OSX Lion)

#c #lambda #c 11 #xcode4.2

#c #лямбда #c 11 #xcode4.2

Вопрос:

Я пытаюсь получить функции C 11 для компиляции на моем Mac. До сих пор я пробовал две разные вещи. Во-первых, последняя версия Xcode (4.2) утверждает, что поддерживает «функции C 11», но когда я пытаюсь скомпилировать это:

 #include <iostream>

int main()
{
    using namespace std;
    int n = [] (int x, int y) { return x   y; }(5, 4);
    cout << n << endl;
}
  

Я получаю ошибку «ожидаемое выражение» для первой скобки ([). Я предполагаю, что лямбда-выражения не включены в новые функции C 11?

Затем, в качестве обходного пути, я загрузил двоичные файлы gcc 4.6 с http://hpc.sourceforge.net но когда я использую gcc-4.6 (/usr/local/bin/gcc-4.6 -std= c 0x test.cpp ) Я получаю:

 Undefined symbols for architecture x86_64:
  "std::cout", referenced from:
      _main in cctnMUFF.o
...
  

Я думаю, проблема в том, что не удается найти стандартную библиотеку?

Спасибо!

Ответ №1:

XCode 4.2 поставляется с поздней версией Clang 2.9, исправленной Apple. Он не поддерживает ни лямбда, ни единообразные инициализаторы. Clang 3.0 также не работает, поэтому вам придется подождать, по крайней мере, до Clang 3.1 (который должен появиться через 6 месяцев).

В качестве альтернативы вы могли бы использовать GCC 4.6 от Macports для поддержки lambda.


ОБНОВЛЕНИЕ к вашему обновлению: вам нужно связать с g или добавить -lstdc вручную.

Комментарии:

1. ага! Это сработало! Просто нужно было использовать g вместо этого. По крайней мере, сейчас я могу скомпилировать вручную. Спасибо!

Ответ №2:

Поддержка lambda была добавлена в gcc 4.5. Xcode использует gcc 4.2, и маловероятно, что он когда-либо будет обновлен до более новой версии (скорее всего, из-за того, что более новые версии gcc лицензированы с GPL3). Дайте нам знать, если вам удастся настроить Xcode для работы с gcc 4.5 или 4.6… Поэтому Apple переходит на Clang. Будем надеяться, что Clang скоро будет поддерживать (большинство) функций C 11…

Комментарии:

1. piokuc: Clang lready поддерживает множество функций C 11, но не lambda (к большому сожалению). Текущее положение вещей смотрите здесь: clang.llvm.org/cxx_status.html

2. Похоже, недавно в svn-версию Clang была добавлена поддержка lambda. Надеюсь, что в следующей версии Xcode (после 4.3) также будет поддержка C lambda.