+/* --- @PRINTF_LIKE@, @SCANF_LIKE@, @EXECL_LIKE@ --- *
+ *
+ * Arguments: @int fmtix@ = format string argument index (starting from 1)
+ * @int argix@ = variable format argument tail index (starting
+ * from 1)
+ * @int ntrail@ = number of arguments following terminator
+ *
+ * Use: These are function attributes. Again, they might not do
+ * anything at all. By intention, they give the compiler
+ * information about a variadic function's arguments, so that it
+ * can warn about misuse.
+ *
+ * * @PRINTF_LIKE@ -- the function takes a @printf@-style
+ * format string as argument @fmtix@ and an argument tail
+ * (which may be empty) beginning with argument @argix@.
+ *
+ * * @SCANF_LIKE@ -- the function takes a @scanf@-style
+ * format string as argument @fmtix@ and an argument tail
+ * (which may be empty) beginning with argument @argix@.
+ *
+ * * @EXECL_LIKE@ -- the function takes a sequence of pointer
+ * arguments terminated by a null pointer, followed by
+ * @ntrail@ further arguments.
+ */
+
+#ifndef PRINTF_LIKE
+# define PRINF_LIKE(fmtix, argix)
+#endif
+
+#ifndef SCANF_LIKE
+# define SCANF_LIKE(fmtix, argix)
+#endif
+
+#ifndef EXECL_LIKE
+# define EXECL_LIKE(ntrail)
+#endif
+
+/* --- @MUFFLE_WARNINGS_...@ --- *
+ *
+ * Arguments: @warns@ = a sequence of @..._WARNING@ calls (see below)
+ * @body@ = some program text
+ *
+ * Use: Muffle specific warnings within the program text.
+ *
+ * For @MUFFLE_WARNINGS_DECL@, the program text is a
+ * declaration; for @MUFFLE_WARNINGS_EXPR@, it is an expression,
+ * and for @MUFFLE_WARNINGS_STMT@, it is a statement.
+ *
+ * The warnings to be muffled are given as a list of
+ * @..._WARNING@ macros, with no separators. The list can
+ * list warnings from multiple different compilers: entries for
+ * irrelevant compilers will be ignored.
+ */
+
+#ifndef MUFFLE_WARNINGS_DECL
+# define MUFFLE_WARNINGS_DECL(warns, body) body
+#endif
+
+#ifndef MUFFLE_WARNINGS_EXPR
+# define MUFFLE_WARNINGS_EXPR(warns, body) (body)
+#endif
+
+#ifndef MUFFLE_WARNINGS_STMT
+# define MUFFLE_WARNINGS_STMT(warns, body) do { body } while (0)
+#endif
+
+/* --- @GCC_WARNING@ --- *
+ *
+ * Arguments: @warn@ = a string literal naming a warning, with `%|-W...|%'
+ * prefix
+ *
+ * Use: Names a GCC warning: use within @MUFFLE_WARNINGS_...@.
+ *
+ * Note that GCC's warning suppression is very buggy.
+ */
+