The __unused macro (which is in fact expanded to the __attribute__((unused)) GCC attribute) only tells the compiler “don’t warn me if I don’t use this variable”.
unused: This attribute, attached to a variable, means that the variable is meant to be possibly unused. GCC does not produce a warning for this variable. (Source: gnu.gcc.org doc)
So this GCC attribute is to avoid a warning when you don’t use a variable, and NOT to trigger one when you use the variable you claimed unused.
As regard to putting the attribute before or after the variable name in your last example, both are accepted and equivalent in your case: the compiler is just lenient about that placement for compatibility purposes (quite as you can also write both const int i or int const i)
For compatibility with existing code written for compiler versions that did not implement attributes on nested declarators, some laxity is allowed in the placing of attributes (Source: gnu.gcc.org doc)