The length of the string is now not always the
[pspp-builds.git] / src / libpspp / compiler.h
1 /* PSPP - a program for statistical analysis.
2    Copyright (C) 2006 Free Software Foundation, Inc.
3
4    This program is free software: you can redistribute it and/or modify
5    it under the terms of the GNU General Public License as published by
6    the Free Software Foundation, either version 3 of the License, or
7    (at your option) any later version.
8
9    This program is distributed in the hope that it will be useful,
10    but WITHOUT ANY WARRANTY; without even the implied warranty of
11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12    GNU General Public License for more details.
13
14    You should have received a copy of the GNU General Public License
15    along with this program.  If not, see <http://www.gnu.org/licenses/>. */
16
17 #ifndef COMPILER_H
18 #define COMPILER_H 1
19
20 /* GNU C allows the programmer to declare that certain functions take
21    printf-like arguments, never return, etc.  Conditionalize these
22    declarations on whether gcc is in use. */
23 #if __GNUC__ > 1
24 #define ATTRIBUTE(X) __attribute__ (X)
25
26 /* Only necessary because of a wart in gnulib's xalloc.h. */
27 #define __attribute__(X) __attribute__ (X)
28 #else
29 #define ATTRIBUTE(X)
30 #endif
31
32 /* Marks a function argument as possibly not used. */
33 #define UNUSED ATTRIBUTE ((unused))
34
35 /* Marks a function that will never return. */
36 #define NO_RETURN ATTRIBUTE ((noreturn))
37
38 /* Mark a function as taking a printf- or scanf-like format
39    string as its FMT'th argument and that the FIRST'th argument
40    is the first one to be checked against the format string. */
41 #define PRINTF_FORMAT(FMT, FIRST) ATTRIBUTE ((format (__printf__, FMT, FIRST)))
42 #define SCANF_FORMAT(FMT, FIRST) ATTRIBUTE ((format (__scanf__, FMT, FIRST)))
43
44 /* Tells the compiler that a function may be treated as if any
45    non-`NULL' pointer it returns cannot alias any other pointer
46    valid when the function returns. */
47 #if __GNUC__ > 2
48 #define MALLOC_LIKE ATTRIBUTE ((malloc))
49 #else
50 #define MALLOC_LIKE
51 #endif
52
53 /* This attribute was added in GCC 4.0. */
54 #if __GNUC__ >= 4
55 #define WARN_UNUSED_RESULT ATTRIBUTE ((warn_unused_result))
56 #else
57 #define WARN_UNUSED_RESULT
58 #endif
59
60 /* This attribute indicates that the function does not examine
61    any values except its arguments, and has no effects except the
62    return value.  A function that has pointer arguments and
63    examines the data pointed to must _not_ be declared
64    `const'.  */
65 #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 5)
66 #define CONST_FUNCTION ATTRIBUTE ((const))
67 #else
68 #define CONST_FUNCTION
69 #endif
70
71 /* This attribute indicates that the function has no effects
72    except the return value and its return value depends only on
73    the parameters and/or global variables. */
74 #if __GNUC__ > 2
75 #define PURE_FUNCTION ATTRIBUTE ((pure))
76 #else
77 #define PURE_FUNCTION
78 #endif
79
80 #endif /* compiler.h */