nesC has a new kind of constant expression: constant functions. These are functions defined within
the language which evaluate to a constant at compile-time.
nesC currently has two constant functions:
• unsigned int unique(char *identifier)
Returns: if the program contains n calls to unique with the same identifier string, each
calls returns a different unsigned integer in the range 0..n − 1.
The intended use of unique is for passing a unique integer to parameterised interface instances,
so that a component providing a parameterised interface can uniquely identify the various
components connected to that interface.
• unsigned int uniqueCount(char *identifier)
Returns: if the program contains n calls to unique with the same identifier string, then
uniqueCount will return n.
The intended use of uniqueCount is for dimensioning arrays (or other data structures) which
will be indexed using the numbers returned by unique. For instance, a Timer service that
identifies its clients (and hence each independent timer) via a parameterised interface and
unique can use uniqueCount to allocate the correct number of timer data structures.