returning a value from a constructor
Joel Sherrill <joel@OARcorp.com>
joel.sherrill at OARcorp.com
Fri Feb 18 20:47:51 UTC 2005
Steve Holle wrote:
> We ran into an interesting problem today. We tried to call the
> following rtems_libio functions from a c++ constructor :
>
> rtems_libio_check_fd( fd );
> iop = rtems_libio_iop( fd );
> rtems_libio_check_is_open(iop);
>
> The first and third generated the following errors :
>
> /tcb2/rlc/source/char_available.c:55: returning a value from a constructor
> /tcb2/rlc/source/char_available.c:57: returning a value from a constructor
>
> This baffled us for a time until we realized that these two functions
> were actually macros that contained returns for failure. We solved the
> problem by calling a subroutine that called the two functions. If the
> two functions were actually subroutines instead of macros the code would
> have compiled.
This took me a second to figure out what was going on.
They are actually in libio_.h which is intended to be helper macros for
the implementation of the section 2 system calls. Are you getting
visibility of this macro through an intentionally public .h file?
Or are you directly including libio_.h?
> I know this would be a huge job and probably not worth the time but it
> would be helpful if it was easy to tell macros from subroutines. One
> method I've seen in the past is that all macros are capitalized.
That is one way.
> Just wanted to get this into the archive in case someone else runs into
> this problem.
>
> Steve Holle
> Link Communications, Inc.
> 1035 Cerise Rd.
> Billings, MT 59101
> sholle at link-comm.com
--
Joel Sherrill, Ph.D. Director of Research & Development
joel at OARcorp.com On-Line Applications Research
Ask me about RTEMS: a free RTOS Huntsville AL 35805
Support Available (256) 722-9985
More information about the users
mailing list