(svn r3263) -Fix: use () around 'variables' in macros, gives less crashes ;)
authortruelight
Tue, 06 Dec 2005 11:36:46 +0000
changeset 2718 4e8f9e89af80
parent 2717 0f385152f0d3
child 2719 146eaa0ec83c
(svn r3263) -Fix: use () around 'variables' in macros, gives less crashes ;)
-Fix: va-args in macros are supported via __VA_ARGS__ in C99, so changed
to that; now GCC 2.95 likes it too :)
ai/ai_event.h
--- a/ai/ai_event.h	Tue Dec 06 09:27:42 2005 +0000
+++ b/ai/ai_event.h	Tue Dec 06 11:36:46 2005 +0000
@@ -7,25 +7,14 @@
 #	include "ai.h"
 
 /* This is how we call events (with safety-check) to GPMI */
-/* XXX -- This macro (vararg macro) isn't supported on old GCCs, but GPMI
- *         is using them too, so it isn't a real problem, yet */
-#	define ai_event(player, event, params...) \
-		if (player < MAX_PLAYERS && _ai_player[player].module != NULL) \
-			gpmi_event(_ai_player[player].module, event, params)
+#	define ai_event(player, event, ...) \
+		if ((player) < MAX_PLAYERS && _ai_player[(player)].module != NULL) \
+			gpmi_event(_ai_player[(player)].module, (event), ##__VA_ARGS__)
 
-#else
-/* If GPMI isn't loaded, don't do a thing with the events (for now at least)
- *  Because old GCCs don't support vararg macros, and OTTD does support those
- *  GCCs, we need something tricky to ignore the events... and this is the solution :)
- *  Ugly, I know, but it works! */
+#else /* GPMI */
 
-#	ifdef DEF_EVENTS
-	void CDECL empty_function(PlayerID player, int event, ...) {}
-#	else
-	extern void CDECL empty_function(PlayerID player, int event, ...);
-#	endif
-#	define ai_event empty_function
-
+/* If GPMI isn't loaded, don't do a thing with the events (for now at least) */
+#	define ai_event(...)
 #endif /* GPMI */
 
 /* To make our life a bit easier; you now only have to define new