I came across the following macro:
#define ITERATE_MACRO(type, entries, size, n) \({ \ unsigned int __i, __n; \ int __ret = 0; \ type *__entry; \ for (__i = 0, __n = 0; __i < (size); \ __i += __entry->next_offset, __n++) { \ __entry = (void *)(entries) + __i; \ __ret = fn(__entry); \ if (__ret != 0) \ break; \ } \ __ret; \})
Does it use GCC extensions, or is it completely ANSI C compliant?
I understand what the macro is doing, but I don't understand the last line (__ret;
). What exactly is it for?