The struct is a declaration of a type. You cannot mix it with the initialization. This is how it could be:
In foo.h:
#ifndef FOO_H
#define FOO_H
struct Foo{
int randInt;
};
extern struct Foo foo;
struct Foo *initFoo(struct Foo *foo_ptr);
#endif
In foo.c:
#include "foo.h"
struct Foo foo;
struct Foo *initFoo(struct Foo *foo_ptr) {
if (!foo_ptr)
return NULL;
foo_ptr->randInt = random(0, 101);
return foo_ptr;
}
random() is a function and therefore its return value cannot be used as static initializer.
Unless -std=c++11 or -std=gnu++11 are enabled.