Инициализация матричной переменной в структуре C

Подобный ответ, но более вероятно идиоматический для ES6:

const a = Promise.resolve(1);
const b = Promise.reject(new Error(2));
const c = Promise.resolve(3);

Promise.all([a, b, c].map(p => p.catch(e => e)))
  .then(results => console.log(results)) // 1,Error: 2,3
  .catch(e => console.log(e));


const console = { log: msg => div.innerHTML += msg + "<br>"};
<div id="div"></div>

В зависимости от типа (ов) возвращаемых значений , ошибки часто можно различить достаточно легко (например, используйте undefined для «не заботьтесь», typeof для простых значений без объекта, result.message, result.toString().startsWith("Error:") и т. д.)

2
задан vkoskiv 31 March 2019 в 01:05
поделиться

2 ответа

Проблема, с которой вы столкнулись, заключается в том, что первый случай - это инициализация , а второй случай - это присвоение , и вы не можете назначить массив.

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

struct transform {
    double A[4][4];
    int b;
    char *c;
};

struct transform t = { .A = {{0, 0, 0, 0},{0, 0, 0, 0},{0, 0, 0, 0},{0, 0, 0, 0}}, .b = 5 };

Любое поле, не инициализированное в явном виде, - это implicity, инициализируемое в 0 или NULL, в зависимости от типа.

0
ответ дан dbush 31 March 2019 в 01:05
поделиться

Нет фундаментальной причины, по которой компилятор C не может быть спроектирован так, чтобы он мог понять, что вы имели в виду. Просто так получилось, что C позволяет вам использовать инициализацию только в определенных случаях, и это не один из них.

0
ответ дан templatetypedef 31 March 2019 в 01:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: