В C99 и выше вы можете использовать составной литерал, который выглядит как приведение, за которым следует инициализатор в фигурных скобках:
int init_value = ...;
int init_id = ...;
Object newObj1 = (Object){ .value = init_value, .id = init_id };
Object newObj2 = (Object){ .id = init_id, .value = init_value };
Последние две строки достигают одинакового эффекта - порядок полей не является критическим. Это использует «назначенные инициализаторы», еще одну особенность C99. Вы можете создать составной литерал без использования назначенных инициализаторов.