(j3.2006) binding labels and global identifiers
Malcolm Cohen
malcolm
Thu Jun 23 05:21:27 UTC 2011
>So then you try
>
>interface
> subroutine localname() bind(c, name="_subr_")
> end subroutine localname
>end interface
Bad move, beginning C names with underscores is highly risky - they are all
reserved(!) - though 90% of the time one gets away with it, at least until
porting to another compiler.
I don't know why we'd be so exercised over a user deliberately trying to fake
out the compiler - "subr_" and all those variants are not reasonable-looking
names for a C interface! The user himself is deliberately trying to be
non-portable, so what. If his foot disappears, that's his problem.
Anyway, there seem to be many obvious naming conventions that get around any
plausible occurrence of this problem, and furthermore said naming conventions
also deal with the FAR more common problem of having internal routine name
clashes between separate libraries. No user is going to be pulling out his hair
saying "I can't find a good name" - the problem as expressed is if the user
deliberately goes for a bad name then there is a possibility of bad things
happening. Well big deal.
Much more likely,
SUBROUTINE localname() BIND(C,NAME='SUBR')
which works perfectly on Unix including IBM and fails on Windows/Intel, or
SUBROUTINE localname() BIND(C,NAME='subr')
which works perfectly on Windows/Intel and most Unix, but fails on IBM.
The author isn't going to cross-check his naming scheme with the standard, he's
going to believe whatever his linker tells him - and if it tells him he is good
to go then he goes!
Cheers,
--
................................Malcolm Cohen, Nihon NAG, Tokyo.
More information about the J3
mailing list