Hi,

>    void delay (uint32_t delay)
>    {
>      setCounter (delay) ;
>      while (!counterTriggered ())
>        ;
>    }
>
> Gives the error:
>
>    dross.c:435: error 98: conflict with previous definition of 'delay'  
> for attribute 'type'
>    from type 'unsigned-long-int'
>    to type 'void function    ( unsigned-long-int) '
>
> However it compiles (and works) with GCC (AVR)
>
> I can see why it's giving that error, but I'm not sure which is right
> though... I imagine there's something deep in a standard somewhere that
> says something like: Implementation dependant... :-)

 From Committee Draft N1124 on C, Section 6.2.1:

4 Every other identifier has scope determined by the placement of its
* declaration (in a declarator or type specifier). If the declarator
* or type specifier that declares the identifier appears outside of
* any block or list of parameters, the identifier has file scope, which
* terminates at the end of the translation unit. If the declarator or
# type specifier that declares the identifier appears inside a block or
# within the list of parameter declarations in a function definition,
# the identifier has block scope, which terminates at the end of the
# associated block. If the declarator or type specifier that declares
   the identifier appears within the list of parameter declarations in
   a function prototype (not part of a function definition), the
   identifier has function prototype scope, which terminates at the end
   of the function declarator. If an identifier designates two different
   entities in the same name space, the scopes might overlap. If so, the
   scope of one entity (the inner scope) will be a strict subset of the
   scope of the other entity (the outer scope). Within the inner scope,
   the identifier designates the entity declared in the inner scope;
   the entity declared in the outer scope is hidden (and not visible)
   within the inner scope.

I gather that the identifier 'delay' for the function has file scope (*)
and should be hidden by the parameter 'delay', which has block scope (#),
so this appears to be a bug in SDCC and should compile nicely.

What do the other developers think?


Raphael

------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
_______________________________________________
Sdcc-user mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/sdcc-user

Reply via email to