We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
I'm trying to initialise a C-structure in like this:
struct S { uint8 a; uint8 b;}; struct S s1={.a=2};
Keil C51 v8.12 compiler does not like it:
error C141: syntax error near '.'
although my syntax is C99 conform. I couldn't find what the ANSI definition says about structure initialisation.
If I try
struct S {uint8 a; uint8 b;}; struct S s1={2};
it does not work either. This is also conform to C99.
Only
struct S {uint8 a;uint8 b;}; struct S s1={2,0};
is valid.
The problem is, that I don't want to explicitly initialise b, which in my real program has many bytes.
Of course, it is always possible to do
s1.a=2;
in the init part of the program. In my real program, the structure is to be stored in FLASH, therefore is no use to initialise like that.
Note that for simplicity, the reseved word "code" was not written.
Do you have an idea what is the source of the problem? Thanks you in advance for your ideas.
"it seems that in the ANSI standard (used by C51) the initialiser list must contain all elements of your structure (array or union), without giving you the option to initialise selected items."
You don't have to initialise every element, but you can't have gaps in your initialiser list.
So why not just put the element(s) that you don't want initialised at the end of the structure...?
Thanks, Andy.
This is exactly the direction I was investigating and might be good enough.
Actually I made a mistake in the original message
it does not work either.
Actually this works. It initialises 'a' to 2.
So I will place all the members of the structure that must be initialised at the beginning.