Многие из нас знают, что это работает:
struct data_s
{
uint32_t p_1;
uint32_t p_2;
uint32_t p_3;
uint32_t p_4;
};
void foo(struct data_s data)
{
printf("p1: %d\r\n", data.p_1);
printf("p2: %d\r\n", data.p_2);
printf("p3: %d\r\n", data.p_3);
printf("p4: %d\r\n", data.p_4);
}
int main(void)
{
foo((struct data_s){
.p_1 = 1,
.p_2 = 2,
.p_3 = 3,
.p_4 = 4});
}
Я видел это много раз, но сейчас не могу найти ничего в справочном руководстве по С об этом. Определен ли этот стандарт конструкции или реализация?
Кроме того, приведение типов является довольно странным, потому что это больше похоже на то, что «я расскажу компилятору, как и что выделять и как его расположить», чем «приведение этого типа к этому типу». Будет ли расположение данных в памяти аргумента, переданного функции, точно таким же, как у объекта, созданного struct data_s obj;
?