Search code examples
cprivate-membersprivate-methods

C Private Variables Get and Set methods


I am working in C, and have some variables that I don't want to be global, but I do want to have get and set methods for them that can be accessed "Globaly" outside of the file. I am used to doing this in Java, but C is very different in this manner. Basically I am looking for something that follows this pseudo Code, but I have not been able to find anywhere with examples that I might look at.

main.c
#include data.h
set(b);

datalog.c
#include data.h
get(b);

data.c
private int c;
set(b){
    c = b;
}
get(c){
    return c;
}

Solution

  • You make the variable static. When a global variable is made static, its scope is restricted to the current file.

    An example is as follows:

    Filename: main.c

    #include <stdio.h>
    
    #include "header.h"
    
    extern int get();
    extern void set(int);
    
    int main()
    {
        set(10);
        printf("value = %d \n", get());   
        set(20);
        printf("value = %d \n", get());   
        set(30);
        printf("value = %d \n", get());   
        set(40);
        printf("value = %d \n", get());   
        return 0;
    }
    

    Filename: header.h

    #include <stdio.h>
    
    int get(void);
    void set(int);
    

    Filename: header.c

    #include "header.h"
    
    static int value = 0;
    
    int get(void)
    {
        return value;
    }
    
    void set(int new_value)
    {
        value = new_value;
    }
    

    Output:

    $ gcc -Wall -o main main.c header.h header.c 
    $ ./main 
    value = 10 
    value = 20 
    value = 30 
    value = 40 
    $