For example, can I do something like this so that only foo.c
can modify the variable foo
?:
foo.h
:
extern const int foo;
void foo_init(void);
void foo_reinit(void);
foo.private.h
:
int foo;
void foo_init(void);
void foo_reinit(void);
foo.c
:
#include "foo.private.h"
void foo_init() { foo = 1; /* ... */ }
void foo_reinit() { foo++; /* ... */ }
bar.c
:
#include <foo.h>
int main()
{
foo_init(); printf("foo: %d\n", foo);
foo_reinit(); printf("foo: %d\n", foo);
return 0;
}
And so that the following would produce an error/warning:
baz.c
:
#include <foo.h>
int main()
{
foo_init(); printf("foo: %d\n", foo);
foo = 0; /* ERROR/WARNING for modifying const variable */
return 0;
}
Is this guaranteed to link correctly?