Składnia C - nawiasy klamrowe i nietypowe wykorzystanie

1

Dzień dobry. Mam pytanie odnośnie dziwnej składni, którą zobaczyłem dzisiaj w Internetach. Chciałbym, żeby ktoś wytłumaczył mi, dlaczego to działa:

#include <stdio.h>

void fooBar(int* num)
{
	printf("%d\n",*num);
}

void main()
{
	fooBar(&(int){10});
}

chodzi mi głównie o tę linię:

fooBar(&(int){10});

i o 10 w nawiasie klamrowym. Dlaczego to działa tak jak działa i co oznaczałoby samo {10} nie zrzutowane na int?

Wiem, że w C++11 jest inicjalizacja poprzez nawiasy klamrowe i jeszcze mógłbym to zrozumieć jakoś, ale w języku C nigdy takich czarów nie widziałem.
Ktoś coś?
Dziękuję za zainteresowanie tematem :)

3

To taki dziwny feature z C99 zwany compound literal. Sam nie wiem do końca jak to działa, odsyłam do opisu: https://gcc.gnu.org/onlinedocs/gcc/Compound-Literals.html

Edit: wygląda na to, że to dość proste (przynajmniej idea, szczegóły są pewnie szalone). Można sobie stworzyć takie coś za pomocą rzutowania i inicjalizatora: (Typ){ wartosc }. Takie coś nie ma nazwy, ale można przekazać do funkcji np. Co ciekawe jest to lvalue więc można pobrać adres (co widać w Twoim kodzie).

Więcej opisów:
http://www.drdobbs.com/the-new-c-compound-literals/184401404
http://nickdesaulniers.github.io/blog/2013/07/25/designated-initialization-with-pointers-in-c/

1 użytkowników online, w tym zalogowanych: 0, gości: 1