Solved

parameters of a function in C

Posted on 2008-10-21
18
186 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
  • 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
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
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 500 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

Secure Your Active Directory - April 20, 2017

Active Directory plays a critical role in your company’s IT infrastructure and keeping it secure in today’s hacker-infested world is a must.
Microsoft published 300+ pages of guidance, but who has the time, money, and resources to implement? Register now to find an easier way.

Question has a verified solution.

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

This is a short and sweet, but (hopefully) to the point article. There seems to be some fundamental misunderstanding about the function prototype for the "main" function in C and C++, more specifically what type this function should return. I see so…
Basic understanding on "OO- Object Orientation" is needed for designing a logical solution to solve a problem. Basic OOAD is a prerequisite for a coder to ensure that they follow the basic design of OO. This would help developers to understand the b…
Video by: Grant
The goal of this video is to provide viewers with basic examples to understand and use for-loops in the C programming language.
The viewer will learn how to use the return statement in functions in C++. The video will also teach the user how to pass data to a function and have the function return data back for further processing.

685 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