Solved

parameters of a function in C

Posted on 2008-10-21
18
182 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
 
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
IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

 

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

Top 6 Sources for Identifying Threat Actor TTPs

Understanding your enemy is essential. These six sources will help you identify the most popular threat actor tactics, techniques, and procedures (TTPs).

Join & Write a Comment

This article is for Object-Oriented Programming (OOP) beginners. An Interface contains declarations of events, indexers, methods and/or properties. Any class which implements the Interface should provide the concrete implementation for each Inter…
Entity Framework is a powerful tool to help you interact with the DataBase but still doesn't help much when we have a Stored Procedure that returns more than one resultset. The solution takes some of out-of-the-box thinking; read on!
Video by: Grant
The goal of this video is to provide viewers with basic examples to understand and use nested-loops in the C programming language.
The viewer will be introduced to the member functions push_back and pop_back of the vector class. The video will teach the difference between the two as well as how to use each one along with its functionality.

708 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

Need Help in Real-Time?

Connect with top rated Experts

17 Experts available now in Live!

Get 1:1 Help Now