ICC сегментация с массивами переменной длины - PullRequest
0 голосов
/ 31 марта 2011

Таким образом, при компиляции с базовым icc bob.cpp -o bob и запуске, следующие ошибки кода:

#include <string>

int foo () {
  return 6;
}

int main() {
  std::string t[foo()];
}

Однако, похоже, что следующие две похожие программы работают нормально.

#include <string>

int foo () {
  return 6;
}

int main() {
  int f = foo();
  std::string t[f];
}

и

#include <string>

int foo () {
  return 6;
}

int main() {
  std::string t[6];
}

Я немного озадачен тем, что происходит.По-видимому, массивы переменной длины нестандартны, и это было для меня неожиданностью, поскольку я всегда использовал g ++, который его поддерживает.Однако, если он не поддерживается ICC, зачем его компилировать?Кроме того, почему пример 2 "работает"?

Что такое правильный код, и, если первый фрагмент неверен, почему он компилируется, а затем почему он работает с ошибками?

IИспользую icc (ICC) 12.0.2 20110112 на 2011 x86_64 Intel (R) Core (TM) i5.

Спасибо

1 Ответ

3 голосов
/ 31 марта 2011

Ну, хотя в C ++ нет массивов переменной длины (хотя C99 и делает), очевидно, ICC поддерживает их как расширение, поскольку ваш код на самом деле компилирует (и поскольку ваш второй фрагмент фактически работает без сбоев).

Если первая версия дает сбой, то это должно быть ошибкой в ​​реализации ICC этого нестандартного расширения.

...