Re: Bound Checking Cross Platform
On 2010-09-22 08:23:28 -0400, Immortal Nephi said:
On Sep 22, 5:45??am, Goran <goran.pu...@gmail.com> wrote:
On Sep 22, 5:25??am, Immortal Nephi <Immortal_Ne...@hotmail.com> wrote:
?? ?? ?? ?? at() function of vector has bound checking. ??It does include
_SCL_SECURE and _SCL_SECURE_VALIDATE macros. ??They are Microsoft
specification. ??What about other platforms such as Mac OS X and Linux?
On other platforms, you could use STLPort, which has support for
bounds checking (look for _STLP_DEBUG), and with gcc, you could use
_GLIBCXX_DEBUG.
I'd be wary of using bounds (and iterator) checking in general in
NDEBUG, though. I personally try to crash my code as fast as possible
upon range and iterator errors in it ;-).
static void _Xran()
{ // report an out_of_range error
_THROW(out_of_range, "invalid vector<T> subscript");
}
The name _Xran begins with an underscore followed by a capital letter.
That means it's a name that's reserved for use by the implementation.
Yes, it throws an exception, unless exceptions are turned off, in which
case it aborts execution. But that latter is implementation-specific.
I copied some functions from vector header. Is this function above
the Standard C++ Library to trigger an exception? If _Xran function
is called, it uses MessageBoxW(???) in Microsoft specification to
trigger an exception. Mac OS X and Linux may use different API
function rather than MessageBoxW(???).
Whoa, you're muddling terms. _Xran throws an exception. It doesn't do
anything with MessageBoxW. It may be that the standard code generated
by Microsoft's IDE for your application catches exceptions and puts up
a message box. But that code isn't in _Xran, and it's not part of the
C++ specification.
--
Pete
Roundhouse Consulting, Ltd. (www.versatilecoding.com) Author of "The
Standard C++ Library Extensions: a Tutorial and Reference
(www.petebecker.com/tr1book)