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