.\" -*-nroff-*- .TH macros 3 "13 December 2003" "Straylight/Edgeware" "mLib utilities library" .SH NAME macros \- useful macros .\" @N .\" @STR .\" @GLUE .\" @DISCARD .\" @IGNORE .\" @DEPRECATED .\" @EXECL_LIKE .\" @IGNORABLE .\" @NORETURN .\" @PRINTF_LIKE .\" @SCANF_LIKE .\" @MUFFLE_WARNINGS_DECL .\" @MUFFLE_WARNINGS_EXPR .\" @MUFFLE_WARNINGS_STMT .\" @GCC_WARNING .SH SYNOPSIS .nf .B "#include " .BI "size_t N(" array ");" .BI "STR(" tokens\fR... ")" .BI "GLUE(" tokens\fR... ", " tokens\fR... ")" .BI "void DISCARD(" scalar ");" .BI "void IGNORE(" variable ");" .BI "DEPRECATED(" msg ")" .BI "EXECL_LIKE(" ntrail ")" .BI "IGNORABLE" .BI "NORETURN" .BI "PRINTF_LIKE(" fmt-index ", " arg-index ")" .BI "SCANF_LIKE(" fmt-index ", " arg-index ")" .BI "MUFFLE_WARNINGS_DECL(" warns ", " decls ")" .BI "MUFFLE_WARNINGS_EXPR(" warns ", " expr ")" .BI "MUFFLE_WARNINGS_STMT(" warns ", " stmt ")" .BI "GCC_WARNING(" option ")" .BI "CLANG_WARNING(" option ")" .fi .SH DESCRIPTION .SS Utilities The .B N macro returns the number of elements in the named .IR array . .PP The .B STR macro expands to a string literal containing the result of expanding its argument .IR tokens . .PP The .B GLUE macro expands to a single token, which is the result of gluing together the tokens resulting from expanding its argument token lists. Each of the argument token lists must expand to a single preprocessing token, and the result of gluing these tokens together must be valid preprocessing token. .PP The .B DISCARD macro discards its argument, which must be of some scalar type. This can be useful in muffling warnings about ignoring return codes in cases where you really don't care. .PP The .B IGNORE macro ignores its argument, which may be an expression of any type. This can be useful in muffling warnings about unused variables. .SS Annotations The following annotations can be attached to function declarations and definitions, as part of the declaration specifiers. (Other positions may also work, depending on your compiler, but don't bet on it.) They might not have any effect, depending on your specific compiler. Currently only GCC is well supported, but exactly which features are available depend on the compiler version. .PP Using a function or variable marked as .B DEPRECATED may provoke a compiler warning; this warning may (depending on your compiler version) include the given .IR msg . .PP A variadic function marked as .B EXECL_LIKE must be called with a null pointer (i.e., an integer constant expression with value 0, cast to .BR "void *") in the variadic part of its argument list, followed by .I ntrail further arguments. Typically, .I ntrail is zero. Compilers may warn about misuse of such functions. .PP A function or variable marked as .B IGNORABLE need not be used. This may muffle warnings about leaving the marked definition unused. .PP A function marked as .B NORETURN must not return. It must have return type .BR void . This may be useful in muffling warnings about uninitialized variables, for example. .PP A variadic function marked as .B PRINTF_LIKE takes a .BR printf (3)-style format argument (in position .IR fmt-index , counting from 1) and a variable-length list of arguments to be formatted (starting from position .IR arg-index ). Compilers may warn about misuse of such functions. .PP A variadic function marked as .B SCANF_LIKE takes a .BR scanf (3)-style format argument (in position .IR fmt-index , counting from 1) and a variable-length list of arguments to be formatted (starting from position .IR arg-index ). Compilers may warn about misuse of such functions. .SS Muffling warnings Some compilers allow you to muffle warnings in particular pieces of code. These macros provide a compiler-neutral interface to such facilities. Each macro takes an argument .IR warns , which is a sequence of calls to .IB compiler _WARNING macros listing the warnings to be muffled. The list may contain warnings for several different compilers. The other argument is a .I body consisting of declarations (in the case of .BR MUFFLE_WARNINGS_DECL ), an expression (for .BR MUFFLE_WARNINGS_EXPR ), or a statement (for .BR MUFFLE_WARNINGS_STMT ). .SS GCC-specific features The .B GCC_VERSION_P macro returns a nonzero value if the compiler is at least version .IB maj . min of GCC, and zero otherwise. It's useful in preprocessor conditions. .PP The .B GCC_WARNING macro is intended to be used in .I warns lists (see above). It takes a string-literal argument .I option naming a GCC warning option, e.g., .BR """\-Wdiv-by-zero""" . .PP The .B CLANG_WARNING is similar, except that it works with the Clang compiler. .PP Note that including .B also defines the compiler-test macros in .BR ; see .BR compiler (3). .SH "SEE ALSO" .BR mLib (3), .BR compiler (3). .SH "AUTHOR" Mark Wooding,