root@sdd.UUCP (03/29/87)
Thanks for the answers to my previous question about UNIFY and C++. Creating a "good old C" function called udelete() that calls the UNIFY record deletion function called delete() solved my problem. Why does C++ change the name of all local symbols (auto symbols) to _auN_xxxx where N is the lexical level. Is there any reason, that I should not eliminate the section of code that modifies the symbol name (at lease for non-overloaded local symbols)? I have tried it and it seems to work. This provides the user with the ability to debug C++ programs utilizing sdb without having to type strange names for local symbols. On the same line, does anyone know of other symbol translations that I can eliminate to make debugging even easier (such as the structure / class prefixes for their members of type (__SCREEN_xxxx)! Daniel Corbett VP Engineering, Software Design & Development Corp.
bs@alice.UUCP (03/30/87)
There are two reasons for the mangling of names of (apparently)
non-overloaded names.
Through derivation a class may have several members of the same name
and you and the compiler must have a way of distinguishing them:
struct B {
int a;
int f();
};
struct D : B {
int a;
int f(int x) { a = x; B::a = x+1; }
};
void ff() {
D d;
d.f(2);
d.B::f();
}
Names used in inline functions must be ``mangled'' so that the C compiler
can distinguish between global names, names local to the inline function,
and names local to the calling function:
int a;
inline f(int a) { return ::a = a++; };
void g()
{
int a;
int b = f(a);
}
You can strip the mangeling off to make debugging interaction easier
(though you loose information), but you cannot strip it off so that
the C compiler does not see it without breaking programs.