0

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?

3
Contributors
3
Replies
4
Views
10 Years
Discussion Span
Last Post by Ancient Dragon
0

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;
     }
0

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.