foreach
Wyatt via Digitalmars-d
digitalmars-d at puremagic.com
Tue Jun 17 05:54:58 PDT 2014
On Monday, 16 June 2014 at 20:32:57 UTC, H. S. Teoh via
Digitalmars-d wrote:
>
> Another recent "enterprise" nastiness I ran into: having
> several functions with identical name in the source tree, each
> of which does something completely different, and which one
> ends up in the executable depends on which library you link
> (this is C btw, there's no function overloading here -- you
> just end up passing arguments of the wrong types to the wrong
> function). To add salt to the wound, the calls to this
> function are inside a library (let's call it libX). So if your
> program links libX and libY, then you're fine, but if your
> program links libX and libZ, then it will produce subtle,
> almost untraceable memory corruption errors due to passing an
> int to a function that expects a pointer. But since one of
> these functions is compiled as a weak symbol, so if you link
> *both* libY and libZ with libX, it mysteriously starts working
> again!
Bah, we can go deeper! So you have different compilation units
with different implementations of the same function. Say,
alloc_vc(). Now, there are actually five different
implementations of this with generally identical signatures,
right down to the argument names and types. Actaully, the
implementations are largely similar-if-not-quite-identical now
that I adjusted them to all use calloc() (aside: stupid Solaris
nulls all allocations even with malloc() and enterprise-grade
programmers WILL rely on this behaviour). Then things get weird:
one of the arguments is of type VC. This is an issue because
that typedef appears ELEVEN TIMES, and the struct ranges from 5
to 35 members. I had to take a walk and clear my head when I
first ran into that.
</commiseration>
-Wyatt
More information about the Digitalmars-d
mailing list