Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C Programming > Create readonly array of data ?

Reply
Thread Tools

Create readonly array of data ?

 
 
paolo
Guest
Posts: n/a
 
      01-02-2012
Please excuse my very poor English, I hope you understand my question.

I want to create a readonly array of data, then a readonly array of a
structure (STRUCT). This is data I access but I want it protected against
accidental change. The following is my test code.

#include "stdafx.h"

struct LVC
{
unsigned short int lo;
unsigned short int hi;

};

void main()
{
//This seems to work
static const unsigned short int LV[4] =
{0xAC00,
0xAC1C,
0xAC38,
0xAC54 };

//THIS DOESN'T WORK. COMPILER COMPLAINS
static const struct LVC[4] = {
{ 0xAC01, 0xAC1B },
{ 0xAC1D, 0xAC37 },
{ 0xAC39, 0xAC53 },
{ 0xAC55, 0xAC6F },
};

unsigned short i,j;

i = LVC[2].lo;
j = LVC[2].hi;

}

I use Microsoft Visual C++ Express Edition
(I also would like to get rid of that #include "stdafx.h" if
there is some compiler configuration that will allow me
to do that.)

Thank you.
 
Reply With Quote
 
 
 
 
Eric Sosman
Guest
Posts: n/a
 
      01-02-2012
On 1/2/2012 4:44 PM, paolo wrote:
> Please excuse my very poor English, I hope you understand my question.
>
> I want to create a readonly array of data, then a readonly array of a
> structure (STRUCT). This is data I access but I want it protected against
> accidental change. The following is my test code.
>
> #include "stdafx.h"
>
> struct LVC
> {
> unsigned short int lo;
> unsigned short int hi;
>
> };
>
> void main()


int main(void)

> {
> //This seems to work
> static const unsigned short int LV[4] =
> {0xAC00,
> 0xAC1C,
> 0xAC38,
> 0xAC54 };
>
> //THIS DOESN'T WORK. COMPILER COMPLAINS
> static const struct LVC[4] = {


This array needs a name. `LVC' is not the name of anything
at all; `struct LVC' is the name of a type, just like `float' is
the name of a type. Try something like

static const struct LVC array[4] = { ...

> { 0xAC01, 0xAC1B },
> { 0xAC1D, 0xAC37 },
> { 0xAC39, 0xAC53 },
> { 0xAC55, 0xAC6F },
> };
>
> unsigned short i,j;
>
> i = LVC[2].lo;
> j = LVC[2].hi;


.... and `i = array[2].lo; j = array[2].hi;'.

> }
>
> I use Microsoft Visual C++ Express Edition
> (I also would like to get rid of that #include "stdafx.h" if
> there is some compiler configuration that will allow me
> to do that.)


Just leave it out: It's not part of C, and no C compiler needs
it. If your compiler complains when you omit "stdafx.h", it is
operating in some sort-of-like-C-but-not-actually-C mode; there are
probably compiler flags or options to tell it to behave like a C
compiler instead. (I'm sorry I don't know what those options might
be; perhaps a Microsoft forum would be able to help.)

--
Eric Sosman
http://www.velocityreviews.com/forums/(E-Mail Removed)d
 
Reply With Quote
 
 
 
 
ec429
Guest
Posts: n/a
 
      01-02-2012
On 02/01/12 21:44, paolo wrote:
> //THIS DOESN'T WORK. COMPILER COMPLAINS

The declaration "static const struct LVC[4]" is invalid; you have not
given the variable a name. "struct LVC" is a type, not a declaration.
Try something like "static const struct LVC my_lvc[4]" instead.

Also, some advice: when asking for help, post the actual error message
produced by the compiler; it makes it easier for others to help you and
thus more likely that they will do so.

> (I also would like to get rid of that #include "stdafx.h" if
> there is some compiler configuration that will allow me
> to do that.)

According to a quick web search, stdafx.h is a precompiled header
containing "standard system and project specific include files that are
used frequently but hardly ever change". You could replace it with
#includes of those headers you actually need, though you may need to
disable the compiler option /Yu'stdafx.h'
-E
--
'sane', adj.: see 'unimaginative'
on the web - http://jttlov.no-ip.org
 
Reply With Quote
 
Jens Thoms Toerring
Guest
Posts: n/a
 
      01-02-2012
paolo <(E-Mail Removed)> wrote:
> Please excuse my very poor English, I hope you understand my question.


> I want to create a readonly array of data, then a readonly array of a
> structure (STRUCT). This is data I access but I want it protected against
> accidental change. The following is my test code.


> #include "stdafx.h"


> struct LVC
> {
> unsigned short int lo;
> unsigned short int hi;


> };


> void main()


That should be

int main( void )

(main() is supposed to retur an int and take either no arguments
or an int and an array of char pointers, but not an unsoecified
number of arguments).

> {
> //This seems to work
> static const unsigned short int LV[4] =
> {0xAC00,cd TE


> 0xAC1C,
> 0xAC38,
> 0xAC54 };


What is the 'static' meant to be good for? Also without
it this will create an array that is read-only. 'static'
only is necessary if you want a variable that "survives"
the end of the function and thus still exists (with the
previous value) when you call the function another time.

> //THIS DOESN'T WORK. COMPILER COMPLAINS
> static const struct LVC[4] = {


The problem is that this should be something like

const struct LVC some_name[ 4 ] = {

and then the compiler should accept it. That's because
the type is 'struct LVC' and you're creating a strange
mix out of the type name and the variable name.

> { 0xAC01, 0xAC1B },
> { 0xAC1D, 0xAC37 },
> { 0xAC39, 0xAC53 },
> { 0xAC55, 0xAC6F },
> };



> I use Microsoft Visual C++ Express Edition


I hope you use it as a C and not a C++ compiler, otherwise
you'd better ask in comp.lang.c++.

> (I also would like to get rid of that #include "stdafx.h" if
> there is some compiler configuration that will allow me
> to do that.)


There's nothing in the program you psoted that would require
the inclusion of any header files.

Regards, Jens
--
\ Jens Thoms Toerring ___ (E-Mail Removed)
\__________________________ http://toerring.de
 
Reply With Quote
 
Thad Smith
Guest
Posts: n/a
 
      01-03-2012
On 1/2/2012 4:12 PM, Jens Thoms Toerring wrote:
> paolo<(E-Mail Removed)> wrote:
>> Please excuse my very poor English, I hope you understand my question.

>

....
>> {
>> //This seems to work
>> static const unsigned short int LV[4] =
>> {0xAC00,cd TE

>
>> 0xAC1C,
>> 0xAC38,
>> 0xAC54 };

>
> What is the 'static' meant to be good for? Also without
> it this will create an array that is read-only. 'static'
> only is necessary if you want a variable that "survives"
> the end of the function and thus still exists (with the
> previous value) when you call the function another time.


While that is true, it is also more efficient for many implementations,
especially embedded implementations which use both read-only and read-write
storage. With the static specifier, the data can be loaded into read-only
memory, while without the static attribute, most implementations will copy the
data into read-write memory at run time, increasing code size (slightly), run
time on each function entry, and RAM requirements. The latter can be
significant on small processors.

Thad
 
Reply With Quote
 
Roberto Waltman
Guest
Posts: n/a
 
      01-04-2012
paolo wrote:

>I use Microsoft Visual C++ Express Edition
>(I also would like to get rid of that #include "stdafx.h" if
>there is some compiler configuration that will allow me
>to do that.)


Disable "use precompiled headers"
--
Roberto Waltman

[ Please reply to the group,
return address is invalid ]
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Datagrid readonly or non visible data not passed back RolfHerbert@googlemail.com ASP .Net 7 05-16-2007 01:54 PM
Datagrid readonly or non visible data not passed back RolfHerbert@googlemail.com ASP .Net 0 05-16-2007 09:07 AM
Create readonly array of data? Susan Rice C Programming 14 01-03-2007 08:07 AM
ASP.NET Readonly panel function with readonly checkbox, readonly radiobutton Jonathan Hyatt ASP .Net Web Controls 1 06-08-2004 07:42 PM
Web Start and readonly data from the server or the cache jeff h. silverman Java 1 07-27-2003 11:48 PM



Advertisments