Weak binding of member functions

V

Vinay

Hello

My question is regarding "weak external symbols". Consider the
following eg.

class test
{
public :
int func1(void); {cout <<"func1";}
int func2(void);
}

int test :: func2(void)
{
cout <<"func2";
}

I compiled this piece of code using the CC for PPC processor, version
"cygnus-2.7.2-960126 egcs-971225". The readelf output shows that the
func1 has weak binding and func2 has normal global binding. Please let
me know why is the function whos implementation is with in the class
definition has weak binding and the one with its implementatin outside
the class definition has normal global binding.

regards
Vinay
 
R

Russ

Possibly because the function within the class definition is seen as a
candidate for inlining and the one whose definition lies outside the class
definition is not.
Not really familiar with the term weak binding but thats my best guess on
whats happening.
 
J

JKop

Vinay posted:
Hello

My question is regarding "weak external symbols". Consider the
following eg.

class test
{
public :
int func1(void); {cout <<"func1";}

Syntax error. Lose the semicolon.

int func1() { cout << "func1"; }
 
A

Andrey Tarasevich

Vinay said:
Hello

My question is regarding "weak external symbols". Consider the
following eg.

class test
{
public :
int func1(void); {cout <<"func1";}
int func2(void);
}

int test :: func2(void)
{
cout <<"func2";
}

I compiled this piece of code using the CC for PPC processor, version
"cygnus-2.7.2-960126 egcs-971225". The readelf output shows that the
func1 has weak binding and func2 has normal global binding. Please let
me know why is the function whos implementation is with in the class
definition has weak binding and the one with its implementatin outside
the class definition has normal global binding.
...

Because the first one is inline function. Inline functions can (and
normally will) have multiple definitions in multiple translation units.
If the compiler decides to generate a normal (non-inline) body for this
function, it is more than likely that this body will be present in
multiple object files. Without normal binding that would result in an
error at linking stage. Weak binding directs the linker to choose one
body and discard the others, no error reported.

We had a relevant discussion a couple of days ago. See topic "Inlines
with external linkage".

BTW, this is a compiler-related question. It should be asked in a
compiler-related newsgroup, not here.
 
A

Andrey Tarasevich

Andrey said:
...
If the compiler decides to generate a normal (non-inline) body for this
function, it is more than likely that this body will be present in
multiple object files. Without normal binding that would result in an
^^^^^^^^^^^^^^^^^^^^^^
I meant "With normal binding ...".
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,014
Latest member
BiancaFix3

Latest Threads

Top