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?

10 Years
Discussion Span
Last Post by Ancient Dragon

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;

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().

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.