Previous: , Up: Function Definitions   [Contents][Index]


22.1.5 Functions That Accept Structure Arguments

Structures in GNU C are first-class objects, so using them as function parameters and arguments works in the natural way. This function swapfoo takes a struct foo with two fields as argument, and returns a structure of the same type but with the fields exchanged.

struct foo { int a, b; };

struct foo x;

struct foo
swapfoo (struct foo inval)
{
  struct foo outval;
  outval.a = inval.b;
  outval.b = inval.a;
  return outval;
}

This simpler definition of swapfoo avoids using a local variable to hold the result about to be return, by using a structure constructor (see Structure Constructors), like this:

struct foo
swapfoo (struct foo inval)
{
  return (struct foo) { inval.b, inval.a };
}

It is valid to define a structure type in a function’s parameter list, as in

int
frob_bar (struct bar { int a, b; } inval)
{
  body
}

and body can access the fields of inval since the structure type struct bar is defined for the whole function body. However, there is no way to create a struct bar argument to pass to frob_bar, except with kludges. As a result, defining a structure type in a parameter list is useless in practice.