Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.c > #151120
| From | Mehdi Amini <atorrses@gmail.com> |
|---|---|
| Newsgroups | comp.lang.c |
| Subject | Re: Ways to avoid global variables |
| Date | 2020-04-06 14:11 +0430 |
| Organization | A noiseless patient Spider |
| Message-ID | <r6etft$m7r$1@dont-email.me> (permalink) |
| References | <r6c5ie$5b9$1@dont-email.me> <r6cr3a$bt1$1@dont-email.me> <r6cum5$4hs$1@dont-email.me> |
On 4/5/20 8:19 PM, James Kuyper wrote:
> On 4/5/20 10:48 AM, James Kuyper wrote:
>> On 4/5/20 4:40 AM, Mehdi Amini wrote:
>>> Hi,
>>>
>>> What are the ways to avoid global variables in C ;
>>
>> The single most important way is to pass around pointers to those
>> variables, usually as function arguments. Functionally related variables
>> can be grouped into structs, and then you only need to pass around a
>> pointer to a single struct in order to access many different variables.
>
> I just realized that I left out an important part of that advice. Before
> you pass around those pointers, you should first change the global
> variables to not be global. At worst, they should have file scope
> definitions with internal linkage, but if you can, make them local to a
> function.
>
Is this an acceptable demo ?
// Code:
#include <stdio.h>
#include <stdlib.h>
#define N 3
typedef struct
{
int i;
char c;
} s_t;
s_t * container(s_t *);
s_t * adder(s_t *);
s_t init(void);
s_t caller(void);
int main(void)
{
s_t ms;
ms=caller();
printf("i is %d , c is '%c'\n",ms.i,ms.c);
return EXIT_SUCCESS;
}
s_t caller(void)
{
s_t sf=init();
int ind;
for(ind=0; ind<N; ind++)
adder(&sf);
return sf;
}
s_t * container(s_t * ins)
{
static s_t cs;
cs.i=ins->i;
cs.c=ins->c;
return &cs;
}
s_t * adder(s_t * ins)
{
ins->i++;
ins->c++;
return ins;
}
s_t init(void)
{
s_t fs={.i=0 , .c='0'};
return fs;
}
// Result:
$gcc -o main *.c -Wall -Wextra -pedantic -std=c11
$main
i is 3 , c is '3'
--
www.my-c-codes.com/
Farewell.
Back to comp.lang.c | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
Ways to avoid global variables Mehdi Amini <atorrses@gmail.com> - 2020-04-05 13:10 +0430
Re: Ways to avoid global variables Mehdi Amini <atorrses@gmail.com> - 2020-04-05 13:23 +0430
Re: Ways to avoid global variables felix@palmen-it.de (Felix Palmen) - 2020-04-05 11:11 +0200
Re: Ways to avoid global variables Malcolm McLean <malcolm.arthur.mclean@gmail.com> - 2020-04-05 02:34 -0700
Re: Ways to avoid global variables James Kuyper <jameskuyper@alumni.caltech.edu> - 2020-04-05 10:48 -0400
Re: Ways to avoid global variables James Kuyper <jameskuyper@alumni.caltech.edu> - 2020-04-05 11:43 -0400
Re: Ways to avoid global variables James Kuyper <jameskuyper@alumni.caltech.edu> - 2020-04-05 16:49 -0400
Re: Ways to avoid global variables Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2020-04-05 16:12 -0700
Re: Ways to avoid global variables James Kuyper <jameskuyper@alumni.caltech.edu> - 2020-04-05 11:49 -0400
Re: Ways to avoid global variables Mehdi Amini <atorrses@gmail.com> - 2020-04-06 14:11 +0430
Re: Ways to avoid global variables Ben Bacarisse <ben.usenet@bsb.me.uk> - 2020-04-06 12:08 +0100
Re: Ways to avoid global variables David Brown <david.brown@hesbynett.no> - 2020-04-05 22:03 +0200
Re: Ways to avoid global variables James Kuyper <jameskuyper@alumni.caltech.edu> - 2020-04-05 16:53 -0400
Re: Ways to avoid global variables Malcolm McLean <malcolm.arthur.mclean@gmail.com> - 2020-04-05 14:11 -0700
Ice cream (Was: Ways to avoid global variables) gazelle@shell.xmission.com (Kenny McCormack) - 2020-04-06 06:45 +0000
Re: Ways to avoid global variables David Brown <david.brown@hesbynett.no> - 2020-04-06 09:19 +0200
Re: Ways to avoid global variables Mehdi Amini <atorrses@gmail.com> - 2020-04-06 13:30 +0430
Re: Ways to avoid global variables Spiros Bousbouras <spibou@gmail.com> - 2020-04-06 09:25 +0000
Re: Ways to avoid global variables Malcolm McLean <malcolm.arthur.mclean@gmail.com> - 2020-04-06 03:03 -0700
Re: Ways to avoid global variables Spiros Bousbouras <spibou@gmail.com> - 2020-04-06 10:16 +0000
Re: Ways to avoid global variables Malcolm McLean <malcolm.arthur.mclean@gmail.com> - 2020-04-06 03:21 -0700
Re: Ways to avoid global variables Spiros Bousbouras <spibou@gmail.com> - 2020-04-06 10:50 +0000
Re: Ways to avoid global variables David Brown <david.brown@hesbynett.no> - 2020-04-06 13:46 +0200
Re: Ways to avoid global variables scott@slp53.sl.home (Scott Lurndal) - 2020-04-06 18:05 +0000
Re: Ways to avoid global variables Ben Bacarisse <ben.usenet@bsb.me.uk> - 2020-04-06 20:37 +0100
csiph-web