c - Error in accessing struct in some other file using extern -
i'm new c. reading extern
.i used built-in data dypes , worked fine.when used structs, gave following error. doing wrong?
bar.c
struct myx { int x; } x;
foo.c
extern struct myx x; int main() { x.x=80; return 0; }
gcc -o barfoo foo.c bar.c error:
invalid use of undefined type 'struct myx'
x.x=80; ^
because gcc -o barfoo foo.c bar.c
(which should gcc -wall -wextra -g foo.c bar.c -o barfoo
; should enable warnings , debugging info when compiling code) compiling 2 compilation units (foo.c
, bar.c
) linking object files together.
every compilation unit (or translation unit) "self-sufficient" regarding c declarations; should declare every -non-predefined- type (e.g. struct
) using in translation unit, in common header file.
so should have
struct myx { int x; };
and
extern struct myx x;
in both foo.c
& bar.c
. avoid copy-pasting, want put in myheader.h
, use #include "myheader.h"
@ start of both foo.c
, bar.c
, i.e. use
// file myheader.h #ifndef myheader_included #define myheader_included struct myx { int x; }; extern struct myx x; #endif /* myheader_included */
notice conventional use of include guard. read more c preprocessor, e.g. documentation of gnu cpp
.
some programming languages (e.g. ocaml, rust, go, ... not c, , not yet c++) have modules or packages deal issue.
ps. should study source code of free software coded in c. you'll learn lot.
Comments
Post a Comment