On 03.10.2012 01:45, Kinkie wrote:
On Sun, Sep 30, 2012 at 12:06 PM, Amos Jeffries
<[email protected]> wrote:
On 28/09/2012 4:10 a.m., Alex Rousskov wrote:
On 09/27/2012 12:48 AM, Amos Jeffries wrote:
On 26/09/2012 4:44 a.m., Kinkie wrote:
Hi all,
this new patch addresses the concerns that were raised.
It stops short of removing typedefs.h (but structs.h is now
gone).
It doesn't break the build on the farm; it is in my opinion
reasonably
complete and it is for me a merge-candidate.
I see a lot of externs being removed in .h files. All fine and
well for
statically linked .o files. But when these files are shuffled into
librares the ABI linking operates a little different and is known
to
strip away symbol references for "internal" objects (ie those with
no
explicit extern marking). Please be wary of that.
Are you sure that such stripping happens in C++ context (rather
than
some old C context)? AFAIK, C++ function declarations have external
C++
linking scope by default, so they all should have "extern" marking
from
the linker point of view.
Moderately sure. I ran into it in trunk recently when moving
functions to
one of the libraries. I forget which.
That might have been a fluke case, but think worth at least
checking up on
explicitly for the general case before doing this big merge.
From
http://stackoverflow.com/questions/1358400/what-is-external-linkage-and-internal-linkage-in-c
:
-----------------------
You can explicitly control the linkage of a symbol by using the
extern
and static keywords and the default linkage is extern for non-const
symbols and static (internal) for const symbols.
// in namespace or global scope
int i; // extern by default
const int ci; // static by default
extern const int eci; // explicitly extern
static int si; // explicitly static
// the same goes for functions (but there are no const functions)
int foo(); // extern by default
static int bar(); // explicitly static
------------------------
We can of course explicitly mark functions as "extern", but this
source agrees with Alex that it's not needed.
If there's no objections, I plan to merge to trunk tomorrow.
Sure. Thank you for checking. +1.
Amos