Richard W.M. Jones wrote:
$ gcc -O2 -c -Woverlength-strings stupid.c
stupid.c: In function ‘insert_lf_record’:
stupid.c:22: warning: string length ‘7394’ is greater than the length ‘509’ ISO C90
compilers are required to support
Without -O2 the error message goes away.
Even ISO C99 compilers don't help - they raise the limit to a mere
4095 bytes.
Hi Rich,
As you no doubt realize, that is because the expansion of your assert
expression is so long. Think of it as encouragement to use inline
functions in place of macros whenever possible.
This is a good example of how inline functions are superior,
in addition to the usual more-type-safe argument. E.g.,
#define STREQ(a,b) (strcmp(a,b) == 0)
static inline int
block_id_eq (const struct hive_h *h, size_t offset, const char *s)
{
return STREQ (((struct ntreg_hbin_block *)(h->addr + offset))->id, s);
}
static size_t
insert_lf_record (struct hive_h *h, size_t old_offs, size_t posn,
const char *name, hive_node_h node)
{
assert (block_id_eq (h, old_offs, "lf") || block_id_eq (h, old_offs,
"lh"));
}