but are the only practical way in which a caller can decide at runtime
which arguments to include in a call,
which is useful when writing wrapper functions.
+.PP
+Perhaps surprisingly,
+keyword arguments have a relatively small performance impact.
+On the author's aging laptop,
+a call to a simple function,
+passing two out of three keyword arguments,
+takes about 30 cycles longer than
+calling a standard function which just takes integer arguments.
+On the other hand,
+quite a lot of code is involved in decoding keyword arguments,
+so code size will naturally suffer.
.
.SS Type definitions
The header file defines two simple structure types.
It assumes that the first keyword name
is in an argument named
.BR kwfirst_ ,
-as set up by
-.B KWTAIL marker described above.
+as set up by the
+.B KWTAIL
+marker described above.
.PP
The macro expands both to a variable declaration and a statement:
in C89, declarations must precede statements,
.I set
is an identifier then
.IP
-.B "KWPARSE_EMPTY(" set ");"
+.BI "KWPARSE_EMPTY(" set ");"
.PP
(note the lack of underscore)
checks that the enclosing function has been passed