I normally build software with many warnings turned on, and also frequently build on non-Linux Unix platforms. In the course of doing both with Geany, I came across many warnings and portability issues that the attached patch seeks to address.
Below is a walkthrough of the changes. I'll describe each sort of change only once, the first time it occurs in the patch file, for brevity:
* (various files): Anytime you have a prototype/definition of a function that doesn't take arguments, use (void) instead of (). This eliminates the "function declaration isn't a prototype" warning.
* highlighting.c: Bitfields in structs should properly have a full integer type.
* highlighting.c: Declaring these HighlightingStyle structures as "static" gets rid of "initializer element is not computable at load time" when they are used in the subsequent entries[] array.
* keybindings.c: Definition of keys[] moved here from keybindings.h. (See below for explanation)
* keybindings.c: Replaced the floating-point bit with a bit of integer math. This parameter is supposed to be an int, so you want to keep it an int.
* highlighting.h: The "gboolean" type already indicates that these fields are true-false flags, and GCC complains about portability if a bitfield specifier is used.
* keybindings.h: Declare, don't define, the keys[] array here. Otherwise, you'll have multiple definitions of keys[] floating around (one for every .c file that uses this header), and the link step will break if you use -fno-common (which you should!).
* sciwrappers.c: Argument 3 to SSM() is supposed to be unsigned, so stick in a cast to make it clear that what's getting passed is *not* -1.
* encodings.c: Moved the definition of the encodings[] array here from encodings.h.
* encodings.c: i is unsigned, so cast that -1. (Enrico, you may want to have a closer look at the logic of this loop... it seems to assume that i might be (guint)-1 going in, but that's impossible, because (guint)-1 is not less than GEANY_ENCODINGS_MAX.)
* encodings.c: Use the handy-dandy printf specifier for gsize that GLib provides for us.
* encodings.h: Declare, don't define, the encodings[] array here.
* prefs.c: No comma after that last entry.
* dialogs.c: Cast the int to gboolean. (gboolean is probably int anyway, but an explicit cast makes things clearer.)
* msgwindow.c: Using the function parameters in the initializer gives a "initializer element is not computable at load time" warning, so just assign them to the fields afterward.
* keyfile.c: Compounds literals look cool, but they confuse older compilers.
* prefix.c: Stick in a trivial bit of code to avoid an empty source file when we're not building a relocatable binary.
* vte.c: Definition of vc moved here from vte.h.
* vte.h: Declare, don't define, the vc variable here.
* document.c: gchar is a signed type, so when you assign e.g. 0xef to it, GCC complains that the literal value overflows the type. So cast explicitly.
* plugins.c: The cast and extra parens in this conditional do not appear to be necessary.
* editor.c: event->x and event->y are gdouble, but sci_get_position_from_xy() wants gints, so cast appropriately.
* socket.c: Moved the definition of socket_info here from socket.h.
* socket.h: Declare, don't define, the socket_info struct here. Some extra footwork is needed here since the struct structure is being defined as well.
* tm_workspace.c: Got rid of a stray semicolon.
* c.c: The cpp conditional should first check whether DEBUG_C is actually defined or not, before using it in a conditional expression. This change gets rid of the warning, but what you might want to do instead is just change the #if into an #ifdef. (I couldn't do that without knowing how DEBUG_C is used, so I leave that to you.)
* sort.c: error() expects a formatted string + optional arguments, but since we're just passing a single, variable string, GCC gets nervous about not being able to check the format. Use a plain "%s" + string to set it at ease.
The biggest portability issue, however, is one that a patch is not well-suited to fix: the use of C++-style comments in C code. GCC allows this, but will readily warn that "C++ style comments are not allowed in ISO C90", and Unix compilers almost universally choke on them as a syntax error.
--Daniel