CCS C Software and Maintenance Offers
FAQFAQ   FAQForum Help   FAQOfficial CCS Support   SearchSearch  RegisterRegister 

ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

CCS does not monitor this forum on a regular basis.

Please do not post bug reports on this forum. Send them to support@ccsinfo.com

Declaring variables - In the right place

 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
jaime



Joined: 25 Nov 2005
Posts: 56
Location: Porto - Portugal

View user's profile Send private message Visit poster's website

Declaring variables - In the right place
PostPosted: Sun Mar 22, 2009 12:02 pm     Reply with quote

Hello

I think its a basic question but...
Where should I declare the variables? In main()? In each function? In the top declaring it global?

Which one is the right place?

Thanks
_________________
www.jagsilva.com
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Sun Mar 22, 2009 1:49 pm     Reply with quote

http://www.tutorialspoint.com/ansi_c/c_variable_types.htm
Ttelmah
Guest







PostPosted: Sun Mar 22, 2009 1:50 pm     Reply with quote

Variables declared outsde the functions, are global. Should be declared before they are used.
Variables inside functions, should be declared at the start of the function, and are 'local' to that function. They are present (memory is reserved for them), inside the declaring function, and in all 'sub' functions. However their 'name', is only valid in the declaring function.
Variables 'die' (their memory is re-used), when the function exits, _unless_ the variable is declared as static.
So:
Code:

int8 fred=3; //fred is global
int8 sub1(int8 val); //sub1, is a function, that is going to return an int8
void sub2(int8 *ptr); //and sub2
int8 sub3(void);

void main(void) {
   int8 tom; //tom is a variable available in the main
   tom=sub1(1);
   //tom now equals 2 (1*2)
   sub2(&tom);
   //tom now back to 1
   tom=sub3();
   //tom now 1. The counter in sub3 is initialised to 0, then incremented.
   tom=sub3();
   //tom now 2
   tom=sub3();
   //tom now 3
   tom=sub3();
   //tom still 3, since 'ctr' is greater than the global 'fred'
   
}

int8 sub1(int8 val) {
   int8 local; //local is a variable available inside sub1
   local = val*2;
   return local; //and result fed back to main
}

void sub2(int8 *ptr) {
   //Now 'tom' still exists, since we are _inside_ the caller
   //we have a pointer to it, and can modify it
   *ptr=*ptr/2;
}

int8 sub3(void) {
   static int8 ctr=0; //ctr is initialised to 0, on the _first_ call
   ctr++
   if (ctr>fred) ctr=fred;
   return ctr;
}


Best Wishes
jaime



Joined: 25 Nov 2005
Posts: 56
Location: Porto - Portugal

View user's profile Send private message Visit poster's website

PostPosted: Mon Mar 23, 2009 1:01 am     Reply with quote

Thanks for your help.... and I have one more question about variables declared in main:

The space reserved for variables declared in main I'll be always reserved. The difference between main variables and global variables is that I need to pass a pointer if I want to use main variables in other functions, correct??
And if the program is in the main and calls a sub-function the variables used in main will be kept, correct?

My problem is that I need a buffer with 512 bytes (for writing in the mmc) and I don't want to lose the data. I don't use the buffer in main. I use it in two other functions but I need to declare it in global or in main if I don't want to lose the data... correct? so... a PROGRAMMER will declare it in main or in global??


Ttelmah wrote:
Variables declared outsde the functions, are global. Should be declared before they are used.

Variables inside functions, should be declared at the start of the function, and are 'local' to that function. They are present (memory is reserved for them), inside the declaring function, and in all 'sub' functions. However their 'name', is only valid in the declaring function.
Variables 'die' (their memory is re-used), when the function exits, _unless_ the variable is declared as static.

_________________
www.jagsilva.com
Ttelmah
Guest







PostPosted: Mon Mar 23, 2009 3:18 am     Reply with quote

Lots of different ways of dealing with this:
1) Declare it as global.
2) Declare it in main, and pass a pointer to the functions.
These are the two you have thought of.
3) Declare it in the first function as 'static', and return a pointer, which is then passed to the second function.

You could also use the malloc library, giving this enough space to hold the buffer, and anything else you want. However this then adds extra overhead.

Remember also, you could have a 'global' _pointer_ to the array, and declare the array either in main, or in a sub function. Set the pointer to it's location, and then not have to worry about handing pointers around.

Best Wishes
Wayne_



Joined: 10 Oct 2007
Posts: 681

View user's profile Send private message

PostPosted: Mon Mar 23, 2009 3:23 am     Reply with quote

You need to use a pointer if you want to alter the contents of the var in a sub function or if it is a complicated var such as a struct.

In your case you have 2 options, declare in main and pass a pointer to the array around (between functions) or declare as a global. As the data is shared between functions I would proberbly declare as a global in this case as it makes life easier for you.

There is no hard rule to follow, passing vars and pointers is safer, using locals uses less memory (usually). Globals makes some things easier. I try to keep the number of globals as low as possible without making life too dificult.
jaime



Joined: 25 Nov 2005
Posts: 56
Location: Porto - Portugal

View user's profile Send private message Visit poster's website

PostPosted: Mon Mar 23, 2009 3:16 pm     Reply with quote

Ok. I think I'm in the right way.

Thanks to all for your help.

jaime
_________________
www.jagsilva.com
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group