| error: conflicting function declarations "insert_c" | old definition in module ask file insert.h line 22 | void (signed int, signed int) | new definition in module insert file insert.c line 207 | void (char c, signed int n) | Makefile:298: recipe for target 'jjove' failed
I think that the compiler is wrong. The definition of insert_c uses the old-style parameter declarations (from before prototypes were introduced to C). Jove predates prototypes and we aspire to support very old systems. We do like prototypes so Jove will use them on systems that support them. This requires us to use old-style function definitions but with corresponding prototyped declarations for those functions. When using that old style of function definition, the parameters are subject to "default argument promotion" rules. So, for example, a parameter declaration of "char c" becomes "int c" in the corresponding prototype. The declaration of insert_c in insert.h uses a prototype that types c as DAPchar, a macro that stands for DefaultArgPromotionOf_char. In other words, int. So: Jove's source very carefully follows the C standard on this matter. Although I don't remember if this was changed in any way by the latest edition. If there were a change, surely it would be to drop old-style definitions, but that isn't what the diagnostic is saying. Caveat: it is legal but rare for int and char to be the same width and for char to be unsigned. On such systems, the Default Arg Promotion of char would be unsigned int.

