systems that have the function.
* Autoconf functions can use gl_* prefix. The AC_* prefix is for
autoconf internal functions.
-* Try to prevent that the files are built if they aren't needed on a
- platform. Valid excuses to this rule include ELIDE constructs that
- lead to an empty .o file (see getopt module).
-* If you have a .c file that leads to an empty .o file on some platforms
- (through some big #if around all the code), still make sure that after
- preprocessing the compilation unit is not empty. This is usually fulfilled
- if you #include <stdio.h> or #include <sys/types.h> before the big #if;
- otherwise you need to add a #else branch containing "typedef int dummy;"
- or "extern int dummy;".
+* Build files only if they are needed on a platform. Look at the
+ alloca and fnmatch modules for how to achieve this. If for some
+ reason you cannot do this, and you have a .c file that leads to an
+ empty .o file on some platforms (through some big #if around all the
+ code), then ensure that the compilation unit is not empty after
+ preprocessing. One way to do this is to #include <stddef.h> or
+ <stdio.h> before the big #if.
Portability guidelines
----------------------
for all practical hosts with flat address spaces, but it is not
always true for hosts with segmented address spaces.
+ * If an existing object has size S, and if T is sufficiently small
+ (e.g., 8 KiB), then S + T cannot overflow. Overflow in this case
+ would mean that the rest of your program fits into T bytes, which
+ can't happen in realistic flat-address-space hosts.
+
* Objects with all bits zero are treated as 0 or NULL. For example,
memset (A, 0, sizeof A) initializes an array A of pointers to NULL.
+ * Adding zero to a null pointer does not change the pointer.
+ For example, 0 + (char *) NULL == (char *) NULL.
+
The above assumptions are not required by the C or POSIX standards but
hold on all practical porting targets that we're familiar with. If
you have a porting target where these assumptions are not true, we'd