Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Pointer to function vs global variable

New EE with very little software experience here. Have read many questions on this site over the last couple years, this would be my first question/post. Haven't quite found the answer for this one.

I would like to know the difference/motivation between having a function modify a global variable within the body (not passing it as a parameter), and between passing the address of a variable.

Here is an example of each to make it more clear. Let's say that I'm declaring some functions "peripheral.c" (with their proper prototypes in "peripheral.h", and using them in "implementation.c"

Method 1:

//peripheral.c

//macros, includes, etc

void function(*x){
   //modify x
}

.

//implementation.c

#include "peripheral.h"

static uint8 var;

function(&var);  //this will end up modifying var

Method 2:

//peripheral.c

//macros, includes, etc

void function(void){
   //modify x
}

.

//implementation.c

#include "peripheral.h"

static uint8 x;

function();    //this will modify x

Is the only motivation to avoid using a "global" variable? (Also, is it really global if it just has file scope?)

Hopefully that question makes sense. Thanks

like image 481
AOM Avatar asked Feb 21 '23 06:02

AOM


1 Answers

The function that receives a parameter pointing to the variable is more general. It can be used to modify a global, a local or indeed any variable. The function that modifies the global can do that task and that task only.

Which is to be preferred depends entirely on the context. Sometimes one approach is better, sometimes the other. It's not possible to say definitively that one approach is always better than the other.

As for whether your global variable really is global, it is global in the sense that there is one single instance of that variable in your process.

like image 150
David Heffernan Avatar answered Mar 03 '23 20:03

David Heffernan