I recenly read this piece of code:
heap.push((Edge){x, 0});
where Edge is something like
struct Edge
{
int a, b;
};
I wonder how standard this syntax is? do all compilers understand this and is it ok to write such code?
I recenly read this piece of code:
heap.push((Edge){x, 0});
where Edge is something like
struct Edge
{
int a, b;
};
I wonder how standard this syntax is? do all compilers understand this and is it ok to write such code?
Jump to PostI saw seen similar constructs several years ago in a VC++ 6.0 MFC program. The parameter to push() mearly creates a temporary instance of the Edge structure and passes that to push().
It's only properly available in C99
5.19 Compound Literals
ISO C99 supports compound literals. A compound literal looks like a cast containing an initializer. Its value is an object of the type specified in the cast, containing the elements specified in the initializer; it is an lvalue. As an extension, GCC supports compound literals in C89 mode and in C++.
Usually, the specified type is a structure. Assume that struct foo and structure are declared as shown:struct foo {int a; char b[2];} structure;
Here is an example of constructing a struct foo with a compound literal:structure = ((struct foo) {x + y, 'a', 0});
This is equivalent to writing the following:{ struct foo temp = {x + y, 'a', 0}; structure = temp; }
thanks!
I saw seen similar constructs several years ago in a VC++ 6.0 MFC program. The parameter to push() mearly creates a temporary instance of the Edge structure and passes that to push().
We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.