I think his mail client is just too world-class,  breathtaking,
amazing, and fabulous--have you tried it?

On Thu, Feb 21, 2013 at 10:13 AM, hiro <23h...@gmail.com> wrote:
> can you please stop sending html mails? thanks
>
> On 2/21/13, Comeau At9Fans <comeauat9f...@gmail.com> wrote:
>> On Mon, Feb 18, 2013 at 9:38 AM, Charles Forsyth
>> <charles.fors...@gmail.com>wrote:
>>
>>> On 18 February 2013 13:02, Comeau At9Fans <comeauat9f...@gmail.com>
>>> wrote:
>>>
>>>> seems to be doing is setting up allowing the call to compile and once
>>>> that is satisfied then the subsequent definition "has" to match it, as
>>>> perhaps a way to do type punning.
>>>
>>>
>>> No, the compiler is simply applying scope rules. Without that inner
>>> declaration explicitly overriding the outer declaration--whether static
>>> or
>>> extern is used--
>>> it will not compile (eg, if you put "static void fn(Outer*);" or "extern
>>> void fn(Outer*);" and remove static from fn in the file scope).
>>>
>>> The behaviour is undefined in ANSI C if two declarations that refer to
>>> the
>>> same object or function do not have compatible types
>>> (normally, you're protected by another rule that you can't have
>>> incompatible declarations *in the same scope*).
>>>
>>> ANSI C does, however, forbid the inner static declaration (which
>>> surprised
>>> me)
>>> "The declaration of an identifier for a function that has block scope
>>> shall have no explicit storage-class specifier other than extern."
>>> (6.7.1)
>>>
>>
>> We're probably saying the same thing.  As you say ANSI C forbids it hence
>> my comment about normally a diagnostic from a so-called mainstream
>> compiler.   And as you say without a declaration it would not compile
>> either.  The declaration should normally be in global scope (it could have
>> been), which would have also produced a diagnostic since Inner/Outer don't
>> match.  That leaves the declaration where Eric showed it, which the Plan 9
>> compiler obviously allowed.  As you note the net effect is it's undefined
>> (if we're using ANSI C as the metric) hence created a kind of type pun
>> (even if the original code did it as a mistake).
>>
>> --
>> Greg Comeau / 4.3.10.1 with C++0xisms now in beta!
>> Comeau C/C++ ONLINE ==>     http://www.comeaucomputing.com/tryitout
>> World Class Compilers:  Breathtaking C++, Amazing C99, Fabulous C90.
>> Comeau C/C++ with Dinkumware's Libraries... Have you tried it?
>>
>

Reply via email to