Функция и структура C на лету

#c #function #struct #on-the-fly

#c #функция #структура #на лету

Вопрос:

Я хотел бы знать, возможно ли инициализировать struct на лету для вызова функции, как в c :

 struct point {
  int x;
  int y;
};

some_function(new point(x,y));
  

Спасибо 🙂

Ответ №1:

ДА. Вы можете использовать составные литералы, введенные в C99.

 some_function((struct pint) {5, 10});
  

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

1. Я не голосовал против, но я думаю, вам следует указать, что продолжительность хранения структуры заканчивается с окончанием окружающего блока. И afaik нет способа сделать что-то подобное с динамической памятью.

2. @mafso Поскольку struct значение в любом случае передается по значению (этот вопрос касается C, а не C ), аргумент о его времени жизни отключен.

3. Обратите внимание, что круглые скобки вокруг аргумента функции являются излишними. some_function((struct point){5, 10}); работает так же хорошо.

4. @cmaster: Да, вы совершенно правы. Но в вопросе передается указатель. Так что это на самом деле не эквивалентно. Но да, время жизни не является проблемой.

5. Стоит отметить, что составные литералы являются значениями lvalues, что означает, что это также можно сделать some_function(amp;(struct pint) {5, 10}) . Это немного ближе к исходному запросу в том смысле, что он выдает аргумент указателя (но, конечно, он не создает динамическое время жизни).

Ответ №2:

Вы можете сделать это на C и вызвать свою функцию, как сказал этот парень, но вам нужно будет добавить флаг -std= c99 в строку вызова gcc, иначе это может привести к сбою, если вы используете некоторые флаги -W * .