This is the second time I can recall this question being asked in a couple of months now. The last time this was asked, though it is not immediately apparent that this is the same question, was here.
What it boils down to is this: GL_MAX_VERTEX_ATTRIBS
as the compiler sees it is a pre-processor token that defines an ID that you can use to ask the OpenGL driver its implementation-defined limit at run-time. When you attempt to print this value directly the only thing you are doing is printing the universal ID that all OpenGL implementations use to query this particular limit.
To get the actual implementation-dependent limit, you need to do this at run-time:
int max_attribs;
glGetIntegerv (GL_MAX_VERTEX_ATTRIBS, &max_attribs);
Incidentally, OpenGL implementations are only required to provide a minimum of 16 per-vertex attributes; most only give you the minimum, which explains why 20 is out-of-bounds.