Tricky preprocessor :) The thing is that it would be perfectly valid to have `struct BLEH foo` in your example, esp. as it expands to nothing. Meh. Maybe you could try current Universal-CTags that has a totally new C and C++ parser, it would be interesting to see what the stock behavior is here (it might be better or worse I guess).
A workaround is to use *ignore.tags* and list your macros there. E.g. mine contains a lot of GLib's macros and a few others: ``` G_GNUC_DEPRECATED_FOR+ G_GNUC_PRINTF+ G_GNUC_SCANF+ G_GNUC_FORMAT+ G_GNUC_* G_DEPRECATED G_DEPRECATED_FOR+ G_UNAVAILABLE+ G_DEFINE_TYPE+ G_DEFINE_TYPE_EXTENDED+ G_DEFINE_TYPE_WITH_CODE+ G_DEFINE_BOXED_TYPE+ GLIB_AVAILABLE_* GIO_AVAILABLE_* GDK_AVAILABLE_* GTK_AVAILABLE_* GLIB_DEPRECATED_IN_2_50_FOR+ GLIB_DEPRECATED_IN_2_48_FOR+ GLIB_DEPRECATED_IN_2_46_FOR+ GLIB_DEPRECATED_IN_2_44_FOR+ GLIB_DEPRECATED_IN_2_42_FOR+ GLIB_DEPRECATED_IN_2_40_FOR+ GLIB_DEPRECATED_IN_2_38_FOR+ GLIB_DEPRECATED_IN_2_36_FOR+ GLIB_DEPRECATED_IN_2_34_FOR+ GLIB_DEPRECATED_IN_2_32_FOR+ GLIB_DEPRECATED_IN_2_30_FOR+ GLIB_DEPRECATED_IN_2_28_FOR+ GLIB_DEPRECATED_IN_2_26_FOR+ GLIB_DEPRECATED_IN_* GLIB_EXTERN GLIB_VAR __STL_NOTHROW __THROW GIT_EXTERN=extern cairo_public GEANY_DEPRECATED GEANY_PRIVATE_FIELD GEANY_DEPRECATED_FOR+ ```