summaryrefslogtreecommitdiff
path: root/ccan/compiler/_info
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2016-03-11 21:18:42 -0900
committerKent Overstreet <kent.overstreet@gmail.com>2016-03-11 21:18:42 -0900
commit009d6db7b01462a264a8fb15477611bc2d8674eb (patch)
tree48bc88526b34c352797711dd405616bd2ca60051 /ccan/compiler/_info
parent074caf716a816d3c4c62bce28503e512d0ef4169 (diff)
Redo lots of stuff
Diffstat (limited to 'ccan/compiler/_info')
-rw-r--r--ccan/compiler/_info64
1 files changed, 64 insertions, 0 deletions
diff --git a/ccan/compiler/_info b/ccan/compiler/_info
new file mode 100644
index 00000000..d60dff4d
--- /dev/null
+++ b/ccan/compiler/_info
@@ -0,0 +1,64 @@
+#include "config.h"
+#include <string.h>
+#include <stdio.h>
+
+/**
+ * compiler - macros for common compiler extensions
+ *
+ * Abstracts away some compiler hints. Currently these include:
+ * - COLD
+ * For functions not called in fast paths (aka. cold functions)
+ * - PRINTF_FMT
+ * For functions which take printf-style parameters.
+ * - CONST_FUNCTION
+ * For functions which return the same value for same parameters.
+ * - NEEDED
+ * For functions and variables which must be emitted even if unused.
+ * - UNNEEDED
+ * For functions and variables which need not be emitted if unused.
+ * - UNUSED
+ * For parameters which are not used.
+ * - IS_COMPILE_CONSTANT()
+ * For using different tradeoffs for compiletime vs runtime evaluation.
+ *
+ * License: CC0 (Public domain)
+ * Author: Rusty Russell <rusty@rustcorp.com.au>
+ *
+ * Example:
+ * #include <ccan/compiler/compiler.h>
+ * #include <stdio.h>
+ * #include <stdarg.h>
+ *
+ * // Example of a (slow-path) logging function.
+ * static int log_threshold = 2;
+ * static void COLD PRINTF_FMT(2,3)
+ * logger(int level, const char *fmt, ...)
+ * {
+ * va_list ap;
+ * va_start(ap, fmt);
+ * if (level >= log_threshold)
+ * vfprintf(stderr, fmt, ap);
+ * va_end(ap);
+ * }
+ *
+ * int main(int argc, char *argv[])
+ * {
+ * if (argc != 1) {
+ * logger(3, "Don't want %i arguments!\n", argc-1);
+ * return 1;
+ * }
+ * return 0;
+ * }
+ */
+int main(int argc, char *argv[])
+{
+ /* Expect exactly one argument */
+ if (argc != 2)
+ return 1;
+
+ if (strcmp(argv[1], "depends") == 0) {
+ return 0;
+ }
+
+ return 1;
+}