Я пытаюсь передать некоторый код в GCC, который компилирует ОК с помощью компилятора IAR. Код инициализирует массив объектов C++ (структура с массивом символов). Я могу заставить его работать с GCC на C, но не с C++. Вот простой пример.Инициализация массива _C++ _ объектов с указателями индекса
#include <stdio.h>
typedef struct
{
int lineID[10];
} TMenu;
static const TMenu t1[8] =
{
{{3}},
{{4}},
[6] = {{33, 22}},
[8] = {{33, 22}},
{{}},
{{9,8,7,6,5,4,3,2,1}},
};
ПРИМЕЧАНИЕ: Я также должен был добавить дополнительные фигурные скобки вокруг инициализаторах, что IAR не жаловалась.
Он компилируется с GCC, но при компиляции с G ++ я получаю следующие ошибки.
x.c:12:6: error: expected identifier before numeric constant
x.c: In lambda function:
x.c:12:9: error: expected '{' before '=' token
x.c: At global scope:
x.c:12:20: error: no match for 'operator=' in '._2 = {{33, 22}}'
x.c:13:6: error: expected identifier before numeric constant
x.c: In lambda function:
x.c:13:9: error: expected '{' before '=' token
x.c: At global scope:
x.c:13:20: error: no match for 'operator=' in '._3 = {{33, 22}}'
Это довольно просто. Это не C++, этот синтаксис не является частью стандарта. –
Я не нахожусь на своем C99, но они выглядят как назначенные инициализаторы, которые не являются частью C++ (и не предоставляются как расширение либо в g ++). –
Примечание: использование g ++ 4.5.3 (на OS X). Я использовал g ++ 4.2.1 (стандарт на OS X 10.7), но это дало мне действительно странные ошибки. В настоящее время я устанавливаю g ++ 4.6 и 4.7, чтобы убедиться, что это имеет значение. – BrendanSimon