Re: char vs char*

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 06/15/2010 11:27 AM, Ian Lance Taylor wrote:
Todd Freed<todd.freed@xxxxxxxxx>  writes:

I don't know if this is a bug, but I suspect that it is.

Consider the following two declarations, which compile fine:

1 static char __attribute__((weakref("LNU__strmats__LNU")))
strmats(char* s, char* m, int* l, unsigned int options)
__attribute__((nonnull));
2 static char* __attribute__((weakref("LNU__strmat__LNU")))
strmat(char* s, char* m, int* l, unsigned int options)
__attribute__((nonnull));

Then, if I move the 'static' keyword, like so:

1 char static __attribute__((weakref("LNU__strmats__LNU")))
strmats(char* s, char* m, int* l, unsigned int options)
__attribute__((nonnull));
2 char* static __attribute__((weakref("LNU__strmat__LNU")))
strmat(char* s, char* m, int* l, unsigned int options)
__attribute__((nonnull));

The 1st declaration still compiles, but the 2nd one fails like this:

error.c:1: error: expected identifier or '(' before 'static'
This is standard C behaviour.  Storage specifiers and type specifiers
may occur in any order.  However, the '*' is a type declarator.  A
type declarator is associated with a specific name being declared.
Type declarators must follow storage specifiers.

In other words, the failing example above fails for the same reason
that

char *a, b;

declares a to have type "char*" and b to have type "char".

Ian

Thanks for the explanation

-Todd


[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux