?
Solved

parameters of a function in C

Posted on 2008-10-21
18
Medium Priority
?
189 Views
Last Modified: 2012-05-05
if say I have :

can I do such thing in C? Not in C++ or C#
int foo(int a, int b){
  a = 2;   ============> is this possible?
  return a; ===========> is this possible?
}

Open in new window

0
Comment
Question by:kuntilanak
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 6
  • 4
  • 4
  • +2
18 Comments
 
LVL 31

Expert Comment

by:Frosty555
ID: 22773448
I don't see anything wrong with the code you posted. Parameters aren't really anything special. They're just variables that get pre-filled by the caller just before the function runs.

Keep in mind that the variable "a" will be passed by value from the caller. As a result, changing it's value to 2 will not cause anything to happen to the variables on the caller's side.
0
 
LVL 5

Expert Comment

by:jfmador
ID: 22773459
you should use const to avoid modifying a parameter

int foo(const int a, int b) {
   a = 2;  // should not compile
}

but if you don't use const you should be able to modify the value

for the return a;  I don't see why it could not possible
0
 

Author Comment

by:kuntilanak
ID: 22773478
so you're saying that return a; although I assigned a = 2 won't give me anything?
0
What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

 
LVL 31

Expert Comment

by:Frosty555
ID: 22773493
What jfmador is suggesting is a good programming practice - not mandatory.

Your code will work fine, but it is bad programming style to modify a paramter. In theory it should have no impact because the parameter is passed by value, but if you get into the habit of directly modifying parameters, one day you'll write a program, and the parameter will be passed by REFERENCE, and you'll cause bugs you will spend hours trying to fix.

Putting "const" into the parameter forces C to fail with a compile error if you attempt to modify the parameter's value, thereby forcing you to follow this good programming style.

But, syntactically, I don't think there's anything wrong with what you're doing.
0
 
LVL 45

Expert Comment

by:sunnycoder
ID: 22773494
return a would return value 2
0
 
LVL 26

Expert Comment

by:Anurag Thakur
ID: 22773511
i dont see anything wrong in you function in C or in C#
you are passing a and b as parameters and they are being passed as normal stack variables and not as references, even if you assign 2 to a and then return it will pose no issues with the compiler and logic.
if you are expecting that the value of the passed variable a changes in the caller function then you might need to use a ref or out (in C#) or use pointers in C

int foo(int a, int b)
{
  a = 2;   ============> is this possible?
  return a; ===========> is this possible?
}
0
 

Author Comment

by:kuntilanak
ID: 22773523
okay.. all I need to know here is just whether this kind of statement is allowed or not.. some statements in C are tricky... having int a in a parameter, is it basically the same as declaring a variable inside the function body?
0
 
LVL 45

Expert Comment

by:sunnycoder
ID: 22773528
Yes it is allowed
0
 
LVL 31

Expert Comment

by:Frosty555
ID: 22773531
Yes. the parameter is no different from any other variables in the function. The only difference is that it's value is filled for you.
0
 

Author Comment

by:kuntilanak
ID: 22773540
ok, if that's the case then doing something like:

will cause a multiple declaration of identifier right?
int foo(int a, int a, int b){
  a = 2;   
  return a; 
}

Open in new window

0
 
LVL 31

Expert Comment

by:Frosty555
ID: 22773548
the compiler should complain that you have two variables named "a", and that is not allowed.

Similarey this is not allowed and should fail at compile time, because "a" has already been defined.
int foo(int a, int b){
  int a = 2;
  return a; 
}

Open in new window

0
 
LVL 45

Expert Comment

by:sunnycoder
ID: 22773552
Yes it would. How would compiler know which a to use?
0
 
LVL 26

Expert Comment

by:Anurag Thakur
ID: 22773560
the code in ID:22773540 will not compile
the variables have to have different names at least
0
 

Author Comment

by:kuntilanak
ID: 22773563
how about in function definition:

int foo(int a, int a);
0
 
LVL 26

Accepted Solution

by:
Anurag Thakur earned 2000 total points
ID: 22773586
no i will not
try it in your compiler
how can two variables have same name in the same scope.
0
 

Author Comment

by:kuntilanak
ID: 22773591
they are just a definition though :), not the actual function declaration...
0
 
LVL 45

Expert Comment

by:sunnycoder
ID: 22773632
int foo(int , int );
would compile
int foo(int a, int a); wont
0
 

Author Comment

by:kuntilanak
ID: 22773655
ok, thanks all
0

Featured Post

New benefit for Premium Members - Upgrade now!

Ready to get started with anonymous questions today? It's easy! Learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Summary: This tutorial covers some basics of pointer, pointer arithmetic and function pointer. What is a pointer: A pointer is a variable which holds an address. This address might be address of another variable/address of devices/address of fu…
Go is an acronym of golang, is a programming language developed Google in 2007. Go is a new language that is mostly in the C family, with significant input from Pascal/Modula/Oberon family. Hence Go arisen as low-level language with fast compilation…
The goal of this video is to provide viewers with basic examples to understand opening and reading files in the C programming language.
The goal of this video is to provide viewers with basic examples to understand and use switch statements in the C programming language.

719 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question