Как инициализировать структуру в соответствии со стандартами языка программирования C

Для удаления повторяющихся строк с несколькими полями сначала привяжите их к новому уникальному ключу, который указан только для отдельных строк, а затем используйте команду «group by» для удаления повторяющихся строк с помощью того же нового уникального ключа:

Create TEMPORARY table tmp select concat(f1,f2) as cfs,t1.* from mytable as t1;
Create index x_tmp_cfs on tmp(cfs);
Create table unduptable select f1,f2,... from tmp group by cfs;
421
задан Rafael 13 December 2018 в 02:46
поделиться

5 ответов

В (ANSI) C99 можно использовать обозначенный инициализатор для инициализации структуры:

MY_TYPE a = { .flag = true, .value = 123, .stuff = 0.456 };

Редактирование: Другие участники инициализируются как нуль: "Опущенные члены поля неявно инициализируются то же как объекты, которые имеют статическую продолжительность хранения". ( https://gcc.gnu.org/onlinedocs/gcc/Designated-Inits.html )

677
ответ дан philant 13 December 2018 в 02:46
поделиться
void function(void) {
  MY_TYPE a;
  a.flag = true;
  a.value = 15;
  a.stuff = 0.123;
}
4
ответ дан David Guyon 13 December 2018 в 02:46
поделиться

Вы почти получили его...

MY_TYPE a = { true,15,0.123 };

Быстрый поиск на 'структуре инициализирует c' , показывает мне это

18
ответ дан Kieveli 13 December 2018 в 02:46
поделиться

a = (MYTYPE){ true, 15, 0.123 };

сделал бы прекрасный в C99

35
ответ дан qrdl 13 December 2018 в 02:46
поделиться

Можно сделать это с составной литерал . Согласно той странице, это работает в C99 (который также рассчитывает как ANSI C).

MY_TYPE a;

a = (MY_TYPE) { .flag = true, .value = 123, .stuff = 0.456 };
...
a = (MY_TYPE) { .value = 234, .stuff = 1.234, .flag = false };

обозначения в инициализаторах являются дополнительными; Вы могли также записать:

a = (MY_TYPE) { true,  123, 0.456 };
...
a = (MY_TYPE) { false, 234, 1.234 };
182
ответ дан Jonathan Leffler 13 December 2018 в 02:46
поделиться
Другие вопросы по тегам:

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