With option 3, the standard conformance of the code you show requires the actual argument (c) to have the TARGET attribute as well. This is something the calling programs often forget to include with their variables. Without the TARGET, the association status of r with c is undefined upon completion of real_view subprogram.
I would be inclined instead to have the dummy argument to have the POINTER attribute and INTENT(IN) which will then require the actual argument to either have the TARGET or the POINTER attributes. This will be better on the client side and perhaps provide added flexibility there. It will then be better to include if ( associated(c) ) check in the real_view routine.